github.com/klaytn/klaytn@v1.12.1/accounts/abi/bind/bind_test.go (about)

     1  // Modifications Copyright 2018 The klaytn Authors
     2  // Copyright 2016 The go-ethereum Authors
     3  // This file is part of the go-ethereum library.
     4  //
     5  // The go-ethereum library is free software: you can redistribute it and/or modify
     6  // it under the terms of the GNU Lesser General Public License as published by
     7  // the Free Software Foundation, either version 3 of the License, or
     8  // (at your option) any later version.
     9  //
    10  // The go-ethereum library is distributed in the hope that it will be useful,
    11  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    13  // GNU Lesser General Public License for more details.
    14  //
    15  // You should have received a copy of the GNU Lesser General Public License
    16  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    17  //
    18  // This file is derived from accounts/abi/bind/bind_test.go (2018/06/04).
    19  // Modified and improved for the klaytn development.
    20  
    21  package bind
    22  
    23  import (
    24  	"fmt"
    25  	"os"
    26  	"os/exec"
    27  	"path/filepath"
    28  	"runtime"
    29  	"strings"
    30  	"testing"
    31  
    32  	"github.com/klaytn/klaytn/common"
    33  )
    34  
    35  var bindTests = []struct {
    36  	name     string
    37  	contract string
    38  	bytecode []string
    39  	abi      []string
    40  	imports  string
    41  	tester   string
    42  	fsigs    []map[string]string
    43  	libs     map[string]string
    44  	aliases  map[string]string
    45  	types    []string
    46  }{
    47  	// Test that the binding is available in combined and separate forms too
    48  	{
    49  		`Empty`,
    50  		`contract NilContract {}`,
    51  		[]string{`606060405260068060106000396000f3606060405200`},
    52  		[]string{`[]`},
    53  		`"github.com/klaytn/klaytn/common"`,
    54  		`
    55  			if b, err := NewEmpty(common.Address{}, nil); b == nil || err != nil {
    56  				t.Fatalf("combined binding (%v) nil or error (%v) not nil", b, nil)
    57  			}
    58  			if b, err := NewEmptyCaller(common.Address{}, nil); b == nil || err != nil {
    59  				t.Fatalf("caller binding (%v) nil or error (%v) not nil", b, nil)
    60  			}
    61  			if b, err := NewEmptyTransactor(common.Address{}, nil); b == nil || err != nil {
    62  				t.Fatalf("transactor binding (%v) nil or error (%v) not nil", b, nil)
    63  			}
    64  		`,
    65  		nil,
    66  		nil,
    67  		nil,
    68  		nil,
    69  	},
    70  	// Test that all the official sample contracts bind correctly
    71  	{
    72  		`Token`,
    73  		`https://ethereum.org/token`,
    74  		[]string{`60606040526040516107fd3803806107fd83398101604052805160805160a05160c051929391820192909101600160a060020a0333166000908152600360209081526040822086905581548551838052601f6002600019610100600186161502019093169290920482018390047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193919290918801908390106100e857805160ff19168380011785555b506101189291505b8082111561017157600081556001016100b4565b50506002805460ff19168317905550505050610658806101a56000396000f35b828001600101855582156100ac579182015b828111156100ac5782518260005055916020019190600101906100fa565b50508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061017557805160ff19168380011785555b506100c89291506100b4565b5090565b82800160010185558215610165579182015b8281111561016557825182600050559160200191906001019061018756606060405236156100775760e060020a600035046306fdde03811461007f57806323b872dd146100dc578063313ce5671461010e57806370a082311461011a57806395d89b4114610132578063a9059cbb1461018e578063cae9ca51146101bd578063dc3080f21461031c578063dd62ed3e14610341575b610365610002565b61036760008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b6103d5600435602435604435600160a060020a038316600090815260036020526040812054829010156104f357610002565b6103e760025460ff1681565b6103d560043560036020526000908152604090205481565b610367600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156104eb5780601f106104c0576101008083540402835291602001916104eb565b610365600435602435600160a060020a033316600090815260036020526040902054819010156103f157610002565b60806020604435600481810135601f8101849004909302840160405260608381526103d5948235946024803595606494939101919081908382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156102f25780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546103d59081565b60046020818152903560009081526040808220909252602435815220546103d59081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156103c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6060908152602090f35b600160a060020a03821660009081526040902054808201101561041357610002565b806003600050600033600160a060020a03168152602001908152602001600020600082828250540392505081905550806003600050600084600160a060020a0316815260200190815260200160002060008282825054019250508190555081600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b820191906000526020600020905b8154815290600101906020018083116104ce57829003601f168201915b505050505081565b600160a060020a03831681526040812054808301101561051257610002565b600160a060020a0380851680835260046020908152604080852033949094168086529382528085205492855260058252808520938552929052908220548301111561055c57610002565b816003600050600086600160a060020a03168152602001908152602001600020600082828250540392505081905550816003600050600085600160a060020a03168152602001908152602001600020600082828250540192505081905550816005600050600086600160a060020a03168152602001908152602001600020600050600033600160a060020a0316815260200190815260200160002060008282825054019250508190555082600160a060020a031633600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3939250505056`},
    75  		[]string{`[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"spentAllowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"inputs":[{"name":"initialSupply","type":"uint256"},{"name":"tokenName","type":"string"},{"name":"decimalUnits","type":"uint8"},{"name":"tokenSymbol","type":"string"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]`},
    76  		`"github.com/klaytn/klaytn/common"`,
    77  		`
    78  			if b, err := NewToken(common.Address{}, nil); b == nil || err != nil {
    79  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
    80  			}
    81  		`,
    82  		nil,
    83  		nil,
    84  		nil,
    85  		nil,
    86  	},
    87  	{
    88  		`Crowdsale`,
    89  		`https://ethereum.org/crowdsale`,
    90  		[]string{`606060408190526007805460ff1916905560a0806105a883396101006040529051608051915160c05160e05160008054600160a060020a03199081169095178155670de0b6b3a7640000958602600155603c9093024201600355930260045560058054909216909217905561052f90819061007990396000f36060604052361561006c5760e060020a600035046301cb3b20811461008257806329dcb0cf1461014457806338af3eed1461014d5780636e66f6e91461015f5780637a3a0e84146101715780637b3e5e7b1461017a578063a035b1fe14610183578063dc0d3dff1461018c575b61020060075460009060ff161561032357610002565b61020060035460009042106103205760025460015490106103cb576002548154600160a060020a0316908290606082818181858883f150915460025460408051600160a060020a039390931683526020830191909152818101869052517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf6945090819003909201919050a15b60405160008054600160a060020a039081169230909116319082818181858883f150506007805460ff1916600117905550505050565b6103a160035481565b6103ab600054600160a060020a031681565b6103ab600554600160a060020a031681565b6103a160015481565b6103a160025481565b6103a160045481565b6103be60043560068054829081101561000257506000526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f8101547ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d409190910154600160a060020a03919091169082565b005b505050815481101561000257906000526020600020906002020160005060008201518160000160006101000a815481600160a060020a030219169083021790555060208201518160010160005055905050806002600082828250540192505081905550600560009054906101000a9004600160a060020a0316600160a060020a031663a9059cbb3360046000505484046040518360e060020a0281526004018083600160a060020a03168152602001828152602001925050506000604051808303816000876161da5a03f11561000257505060408051600160a060020a03331681526020810184905260018183015290517fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf692509081900360600190a15b50565b5060a0604052336060908152346080819052600680546001810180835592939282908280158290116102025760020281600202836000526020600020918201910161020291905b8082111561039d57805473ffffffffffffffffffffffffffffffffffffffff19168155600060019190910190815561036a565b5090565b6060908152602090f35b600160a060020a03166060908152602090f35b6060918252608052604090f35b5b60065481101561010e576006805482908110156100025760009182526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600680549254600160a060020a0316928490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460405190915082818181858883f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf660066000508281548110156100025760008290526002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01548154600160a060020a039190911691908490811015610002576002027ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d40015460408051600160a060020a0394909416845260208401919091526000838201525191829003606001919050a16001016103cc56`},
    91  		[]string{`[{"constant":false,"inputs":[],"name":"checkGoalReached","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"deadline","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"tokenReward","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"fundingGoal","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"amountRaised","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"price","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"funders","outputs":[{"name":"addr","type":"address"},{"name":"amount","type":"uint256"}],"type":"function"},{"inputs":[{"name":"ifSuccessfulSendTo","type":"address"},{"name":"fundingGoalInEthers","type":"uint256"},{"name":"durationInMinutes","type":"uint256"},{"name":"etherCostOfEachToken","type":"uint256"},{"name":"addressOfTokenUsedAsReward","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"backer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"isContribution","type":"bool"}],"name":"FundTransfer","type":"event"}]`},
    92  		`"github.com/klaytn/klaytn/common"`,
    93  		`
    94  			if b, err := NewCrowdsale(common.Address{}, nil); b == nil || err != nil {
    95  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
    96  			}
    97  		`,
    98  		nil,
    99  		nil,
   100  		nil,
   101  		nil,
   102  	},
   103  	{
   104  		`DAO`,
   105  		`https://ethereum.org/dao`,
   106  		[]string{`606060405260405160808061145f833960e06040529051905160a05160c05160008054600160a060020a03191633179055600184815560028490556003839055600780549182018082558280158290116100b8576003028160030283600052602060002091820191016100b891906101c8565b50506060919091015160029190910155600160a060020a0381166000146100a65760008054600160a060020a031916821790555b505050506111f18061026e6000396000f35b505060408051608081018252600080825260208281018290528351908101845281815292820192909252426060820152600780549194509250811015610002579081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6889050815181546020848101517401000000000000000000000000000000000000000002600160a060020a03199290921690921760a060020a60ff021916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f9081018390048201949192919091019083901061023e57805160ff19168380011785555b50610072929150610226565b5050600060028201556001015b8082111561023a578054600160a860020a031916815560018181018054600080835592600290821615610100026000190190911604601f81901061020c57506101bb565b601f0160209004906000526020600020908101906101bb91905b8082111561023a5760008155600101610226565b5090565b828001600101855582156101af579182015b828111156101af57825182600050559160200191906001019061025056606060405236156100b95760e060020a6000350463013cf08b81146100bb578063237e9492146101285780633910682114610281578063400e3949146102995780635daf08ca146102a257806369bd34361461032f5780638160f0b5146103385780638da5cb5b146103415780639644fcbd14610353578063aa02a90f146103be578063b1050da5146103c7578063bcca1fd3146104b5578063d3c0715b146104dc578063eceb29451461058d578063f2fde38b1461067b575b005b61069c6004356004805482908110156100025790600052602060002090600a02016000506005810154815460018301546003840154600485015460068601546007870154600160a060020a03959095169750929560020194919360ff828116946101009093041692919089565b60408051602060248035600481810135601f81018590048502860185019096528585526107759581359591946044949293909201918190840183828082843750949650505050505050600060006004600050848154811015610002575090527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19e600a8402908101547f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b909101904210806101e65750600481015460ff165b8061026757508060000160009054906101000a9004600160a060020a03168160010160005054846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f15090500193505050506040518091039020816007016000505414155b8061027757506001546005820154105b1561109257610002565b61077560043560066020526000908152604090205481565b61077560055481565b61078760043560078054829081101561000257506000526003026000805160206111d18339815191528101547fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68a820154600160a060020a0382169260a060020a90920460ff16917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689019084565b61077560025481565b61077560015481565b610830600054600160a060020a031681565b604080516020604435600481810135601f81018490048402850184019095528484526100b9948135946024803595939460649492939101918190840183828082843750949650505050505050600080548190600160a060020a03908116339091161461084d57610002565b61077560035481565b604080516020604435600481810135601f8101849004840285018401909552848452610775948135946024803595939460649492939101918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a019093528282529698976084979196506024909101945090925082915084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806104ab5750604081205460078054909190811015610002579082526003026000805160206111d1833981519152015460a060020a900460ff16155b15610ce557610002565b6100b960043560243560443560005433600160a060020a03908116911614610b1857610002565b604080516020604435600481810135601f810184900484028501840190955284845261077594813594602480359593946064949293910191819084018382808284375094965050505050505033600160a060020a031660009081526006602052604081205481908114806105835750604081205460078054909190811015610002579082526003026000805160206111d18339815191520181505460a060020a900460ff16155b15610f1d57610002565b604080516020606435600481810135601f81018490048402850184019095528484526107759481359460248035956044359560849492019190819084018382808284375094965050505050505060006000600460005086815481101561000257908252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01815090508484846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005054149150610cdc565b6100b960043560005433600160a060020a03908116911614610f0857610002565b604051808a600160a060020a031681526020018981526020018060200188815260200187815260200186815260200185815260200184815260200183815260200182810382528981815460018160011615610100020316600290048152602001915080546001816001161561010002031660029004801561075e5780601f106107335761010080835404028352916020019161075e565b820191906000526020600020905b81548152906001019060200180831161074157829003601f168201915b50509a505050505050505050505060405180910390f35b60408051918252519081900360200190f35b60408051600160a060020a038616815260208101859052606081018390526080918101828152845460026001821615610100026000190190911604928201839052909160a08301908590801561081e5780601f106107f35761010080835404028352916020019161081e565b820191906000526020600020905b81548152906001019060200180831161080157829003601f168201915b50509550505050505060405180910390f35b60408051600160a060020a03929092168252519081900360200190f35b600160a060020a03851660009081526006602052604081205414156108a957604060002060078054918290556001820180825582801582901161095c5760030281600302836000526020600020918201910161095c9190610a4f565b600160a060020a03851660009081526006602052604090205460078054919350908390811015610002575060005250600381026000805160206111d183398151915201805474ff0000000000000000000000000000000000000000191660a060020a85021781555b60408051600160a060020a03871681526020810186905281517f27b022af4a8347100c7a041ce5ccf8e14d644ff05de696315196faae8cd50c9b929181900390910190a15050505050565b505050915081506080604051908101604052808681526020018581526020018481526020014281526020015060076000508381548110156100025790600052602060002090600302016000508151815460208481015160a060020a02600160a060020a03199290921690921774ff00000000000000000000000000000000000000001916178255604083015180516001848101805460008281528690209195600293821615610100026000190190911692909204601f90810183900482019491929190910190839010610ad357805160ff19168380011785555b50610b03929150610abb565b5050600060028201556001015b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610aa15750610a42565b601f016020900490600052602060002090810190610a4291905b80821115610acf5760008155600101610abb565b5090565b82800160010185558215610a36579182015b82811115610a36578251826000505591602001919060010190610ae5565b50506060919091015160029190910155610911565b600183905560028290556003819055604080518481526020810184905280820183905290517fa439d3fa452be5e0e1e24a8145e715f4fd8b9c08c96a42fd82a855a85e5d57de9181900360600190a1505050565b50508585846040518084600160a060020a0316606060020a0281526014018381526020018280519060200190808383829060006004602084601f0104600f02600301f150905001935050505060405180910390208160070160005081905550600260005054603c024201816003016000508190555060008160040160006101000a81548160ff0219169083021790555060008160040160016101000a81548160ff02191690830217905550600081600501600050819055507f646fec02522b41e7125cfc859a64fd4f4cefd5dc3b6237ca0abe251ded1fa881828787876040518085815260200184600160a060020a03168152602001838152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f168015610cc45780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1600182016005555b50949350505050565b6004805460018101808355909190828015829011610d1c57600a0281600a028360005260206000209182019101610d1c9190610db8565b505060048054929450918491508110156100025790600052602060002090600a02016000508054600160a060020a031916871781556001818101879055855160028381018054600082815260209081902096975091959481161561010002600019011691909104601f90810182900484019391890190839010610ed857805160ff19168380011785555b50610b6c929150610abb565b50506001015b80821115610acf578054600160a060020a03191681556000600182810182905560028381018054848255909281161561010002600019011604601f819010610e9c57505b5060006003830181905560048301805461ffff191690556005830181905560068301819055600783018190556008830180548282559082526020909120610db2916002028101905b80821115610acf57805474ffffffffffffffffffffffffffffffffffffffffff1916815560018181018054600080835592600290821615610100026000190190911604601f819010610eba57505b5050600101610e44565b601f016020900490600052602060002090810190610dfc9190610abb565b601f016020900490600052602060002090810190610e929190610abb565b82800160010185558215610da6579182015b82811115610da6578251826000505591602001919060010190610eea565b60008054600160a060020a0319168217905550565b600480548690811015610002576000918252600a027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01905033600160a060020a0316600090815260098201602052604090205490915060ff1660011415610f8457610002565b33600160a060020a031660009081526009820160205260409020805460ff1916600190811790915560058201805490910190558315610fcd576006810180546001019055610fda565b6006810180546000190190555b7fc34f869b7ff431b034b7b9aea9822dac189a685e0b015c7d1be3add3f89128e8858533866040518085815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561107a5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a1509392505050565b6006810154600354901315611158578060000160009054906101000a9004600160a060020a0316600160a060020a03168160010160005054670de0b6b3a76400000284604051808280519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156111225780820380516001836020036101000a031916815260200191505b5091505060006040518083038185876185025a03f15050505060048101805460ff191660011761ff00191661010017905561116d565b60048101805460ff191660011761ff00191690555b60068101546005820154600483015460408051888152602081019490945283810192909252610100900460ff166060830152517fd220b7272a8b6d0d7d6bcdace67b936a8f175e6d5c1b3ee438b72256b32ab3af9181900360800190a1509291505056a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688`},
   107  		[]string{`[{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"description","type":"string"},{"name":"votingDeadline","type":"uint256"},{"name":"executed","type":"bool"},{"name":"proposalPassed","type":"bool"},{"name":"numberOfVotes","type":"uint256"},{"name":"currentResult","type":"int256"},{"name":"proposalHash","type":"bytes32"}],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"executeProposal","outputs":[{"name":"result","type":"int256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"memberId","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"numProposals","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"members","outputs":[{"name":"member","type":"address"},{"name":"canVote","type":"bool"},{"name":"name","type":"string"},{"name":"memberSince","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"debatingPeriodInMinutes","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"minimumQuorum","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"targetMember","type":"address"},{"name":"canVote","type":"bool"},{"name":"memberName","type":"string"}],"name":"changeMembership","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"majorityMargin","outputs":[{"name":"","type":"int256"}],"type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"JobDescription","type":"string"},{"name":"transactionBytecode","type":"bytes"}],"name":"newProposal","outputs":[{"name":"proposalID","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"}],"name":"changeVotingRules","outputs":[],"type":"function"},{"constant":false,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"supportsProposal","type":"bool"},{"name":"justificationText","type":"string"}],"name":"vote","outputs":[{"name":"voteID","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[{"name":"proposalNumber","type":"uint256"},{"name":"beneficiary","type":"address"},{"name":"etherAmount","type":"uint256"},{"name":"transactionBytecode","type":"bytes"}],"name":"checkProposalCode","outputs":[{"name":"codeChecksOut","type":"bool"}],"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"type":"function"},{"inputs":[{"name":"minimumQuorumForProposals","type":"uint256"},{"name":"minutesForDebate","type":"uint256"},{"name":"marginOfVotesForMajority","type":"int256"},{"name":"congressLeader","type":"address"}],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"description","type":"string"}],"name":"ProposalAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"position","type":"bool"},{"indexed":false,"name":"voter","type":"address"},{"indexed":false,"name":"justification","type":"string"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"proposalID","type":"uint256"},{"indexed":false,"name":"result","type":"int256"},{"indexed":false,"name":"quorum","type":"uint256"},{"indexed":false,"name":"active","type":"bool"}],"name":"ProposalTallied","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"member","type":"address"},{"indexed":false,"name":"isMember","type":"bool"}],"name":"MembershipChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"minimumQuorum","type":"uint256"},{"indexed":false,"name":"debatingPeriodInMinutes","type":"uint256"},{"indexed":false,"name":"majorityMargin","type":"int256"}],"name":"ChangeOfRules","type":"event"}]`},
   108  		`"github.com/klaytn/klaytn/common"`,
   109  		`
   110  			if b, err := NewDAO(common.Address{}, nil); b == nil || err != nil {
   111  				t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   112  			}
   113  		`,
   114  		nil,
   115  		nil,
   116  		nil,
   117  		nil,
   118  	},
   119  	// Test that named and anonymous inputs are handled correctly
   120  	{
   121  		`InputChecker`, ``,
   122  		[]string{``},
   123  		[]string{`
   124  			[
   125  				{"type":"function","name":"noInput","constant":true,"inputs":[],"outputs":[]},
   126  				{"type":"function","name":"namedInput","constant":true,"inputs":[{"name":"str","type":"string"}],"outputs":[]},
   127  				{"type":"function","name":"anonInput","constant":true,"inputs":[{"name":"","type":"string"}],"outputs":[]},
   128  				{"type":"function","name":"namedInputs","constant":true,"inputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}],"outputs":[]},
   129  				{"type":"function","name":"anonInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"","type":"string"}],"outputs":[]},
   130  				{"type":"function","name":"mixedInputs","constant":true,"inputs":[{"name":"","type":"string"},{"name":"str","type":"string"}],"outputs":[]}
   131  			]
   132  		`},
   133  		`
   134  			"fmt"
   135  
   136  			"github.com/klaytn/klaytn/common"
   137  		`,
   138  		`if b, err := NewInputChecker(common.Address{}, nil); b == nil || err != nil {
   139  			 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   140  		 } else if false { // Don't run, just compile and test types
   141  			 var err error
   142  
   143  			 err = b.NoInput(nil)
   144  			 err = b.NamedInput(nil, "")
   145  			 err = b.AnonInput(nil, "")
   146  			 err = b.NamedInputs(nil, "", "")
   147  			 err = b.AnonInputs(nil, "", "")
   148  			 err = b.MixedInputs(nil, "", "")
   149  
   150  			 fmt.Println(err)
   151  		 }`,
   152  		nil,
   153  		nil,
   154  		nil,
   155  		nil,
   156  	},
   157  	// Test that named and anonymous outputs are handled correctly
   158  	{
   159  		`OutputChecker`, ``,
   160  		[]string{``},
   161  		[]string{`
   162  			[
   163  				{"type":"function","name":"noOutput","constant":true,"inputs":[],"outputs":[]},
   164  				{"type":"function","name":"namedOutput","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"}]},
   165  				{"type":"function","name":"anonOutput","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"}]},
   166  				{"type":"function","name":"namedOutputs","constant":true,"inputs":[],"outputs":[{"name":"str1","type":"string"},{"name":"str2","type":"string"}]},
   167  				{"type":"function","name":"collidingOutputs","constant":true,"inputs":[],"outputs":[{"name":"str","type":"string"},{"name":"Str","type":"string"}]},
   168  				{"type":"function","name":"anonOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"","type":"string"}]},
   169  				{"type":"function","name":"mixedOutputs","constant":true,"inputs":[],"outputs":[{"name":"","type":"string"},{"name":"str","type":"string"}]}
   170  			]
   171  		`},
   172  		`
   173  			"fmt"
   174  
   175  			"github.com/klaytn/klaytn/common"
   176  		`,
   177  		`if b, err := NewOutputChecker(common.Address{}, nil); b == nil || err != nil {
   178  			 t.Fatalf("binding (%v) nil or error (%v) not nil", b, nil)
   179  		 } else if false { // Don't run, just compile and test types
   180  			 var str1, str2 string
   181  			 var err error
   182  
   183  			 err              = b.NoOutput(nil)
   184  			 str1, err        = b.NamedOutput(nil)
   185  			 str1, err        = b.AnonOutput(nil)
   186  			 res, _          := b.NamedOutputs(nil)
   187  			 str1, str2, err  = b.CollidingOutputs(nil)
   188  			 str1, str2, err  = b.AnonOutputs(nil)
   189  			 str1, str2, err  = b.MixedOutputs(nil)
   190  
   191  			 fmt.Println(str1, str2, res.Str1, res.Str2, err)
   192  		 }`,
   193  		nil,
   194  		nil,
   195  		nil,
   196  		nil,
   197  	},
   198  	// Tests that named, anonymous and indexed events are handled correctly
   199  	{
   200  		`EventChecker`, ``,
   201  		[]string{``},
   202  		[]string{`
   203  			[
   204  				{"type":"event","name":"empty","inputs":[]},
   205  				{"type":"event","name":"indexed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256","indexed":true}]},
   206  				{"type":"event","name":"mixed","inputs":[{"name":"addr","type":"address","indexed":true},{"name":"num","type":"int256"}]},
   207  				{"type":"event","name":"anonymous","anonymous":true,"inputs":[]},
   208  				{"type":"event","name":"dynamic","inputs":[{"name":"idxStr","type":"string","indexed":true},{"name":"idxDat","type":"bytes","indexed":true},{"name":"str","type":"string"},{"name":"dat","type":"bytes"}]},
   209  				{"type":"event","name":"unnamed","inputs":[{"name":"","type":"uint256","indexed": true},{"name":"","type":"uint256","indexed":true}]}
   210  			]
   211  		`},
   212  		`
   213  			"fmt"
   214  			"math/big"
   215  			"reflect"
   216  
   217  			"github.com/klaytn/klaytn/common"
   218  		`,
   219  		`if e, err := NewEventChecker(common.Address{}, nil); e == nil || err != nil {
   220  			 t.Fatalf("binding (%v) nil or error (%v) not nil", e, nil)
   221  		 } else if false { // Don't run, just compile and test types
   222  			 var (
   223  				 err  error
   224  			   res  bool
   225  				 str  string
   226  				 dat  []byte
   227  				 hash common.Hash
   228  			 )
   229  			 _, err = e.FilterEmpty(nil)
   230  			 _, err = e.FilterIndexed(nil, []common.Address{}, []*big.Int{})
   231  
   232  			 mit, err := e.FilterMixed(nil, []common.Address{})
   233  
   234  			 res = mit.Next()  // Make sure the iterator has a Next method
   235  			 err = mit.Error() // Make sure the iterator has an Error method
   236  			 err = mit.Close() // Make sure the iterator has a Close method
   237  
   238  			 fmt.Println(mit.Event.Raw.BlockHash) // Make sure the raw log is contained within the results
   239  			 fmt.Println(mit.Event.Num)           // Make sure the unpacked non-indexed fields are present
   240  			 fmt.Println(mit.Event.Addr)          // Make sure the reconstructed indexed fields are present
   241  
   242  			 dit, err := e.FilterDynamic(nil, []string{}, [][]byte{})
   243  
   244  			 str  = dit.Event.Str    // Make sure non-indexed strings retain their type
   245  			 dat  = dit.Event.Dat    // Make sure non-indexed bytes retain their type
   246  			 hash = dit.Event.IdxStr // Make sure indexed strings turn into hashes
   247  			 hash = dit.Event.IdxDat // Make sure indexed bytes turn into hashes
   248  
   249  			 sink := make(chan *EventCheckerMixed)
   250  			 sub, err := e.WatchMixed(nil, sink, []common.Address{})
   251  			 defer sub.Unsubscribe()
   252  
   253  			 event := <-sink
   254  			 fmt.Println(event.Raw.BlockHash) // Make sure the raw log is contained within the results
   255  			 fmt.Println(event.Num)           // Make sure the unpacked non-indexed fields are present
   256  			 fmt.Println(event.Addr)          // Make sure the reconstructed indexed fields are present
   257  
   258  			 fmt.Println(res, str, dat, hash, err)
   259  
   260  			 oit, err := e.FilterUnnamed(nil, []*big.Int{}, []*big.Int{})
   261  
   262  			 arg0  := oit.Event.Arg0    // Make sure unnamed arguments are handled correctly
   263  			 arg1  := oit.Event.Arg1    // Make sure unnamed arguments are handled correctly
   264  			 fmt.Println(arg0, arg1)
   265  		 }
   266  		 // Run a tiny reflection test to ensure disallowed methods don't appear
   267  		 if _, ok := reflect.TypeOf(&EventChecker{}).MethodByName("FilterAnonymous"); ok {
   268  		 	t.Errorf("binding has disallowed method (FilterAnonymous)")
   269  		 }`,
   270  		nil,
   271  		nil,
   272  		nil,
   273  		nil,
   274  	},
   275  	// Test that contract interactions (deploy, transact and call) generate working code
   276  	{
   277  		`Interactor`,
   278  		`
   279  			contract Interactor {
   280  				string public deployString;
   281  				string public transactString;
   282  
   283  				function Interactor(string str) {
   284  				  deployString = str;
   285  				}
   286  
   287  				function transact(string str) {
   288  				  transactString = str;
   289  				}
   290  			}
   291  		`,
   292  		[]string{`6060604052604051610328380380610328833981016040528051018060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10608d57805160ff19168380011785555b50607c9291505b8082111560ba57838155600101606b565b50505061026a806100be6000396000f35b828001600101855582156064579182015b828111156064578251826000505591602001919060010190609e565b509056606060405260e060020a60003504630d86a0e181146100315780636874e8091461008d578063d736c513146100ea575b005b610190600180546020600282841615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b61019060008054602060026001831615610100026000190190921691909104601f810182900490910260809081016040526060828152929190828280156102295780601f106101fe57610100808354040283529160200191610229565b60206004803580820135601f81018490049093026080908101604052606084815261002f946024939192918401918190838280828437509496505050505050508060016000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061023157805160ff19168380011785555b506102619291505b808211156102665760008155830161017d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156101f05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b820191906000526020600020905b81548152906001019060200180831161020c57829003601f168201915b505050505081565b82800160010185558215610175579182015b82811115610175578251826000505591602001919060010190610243565b505050565b509056`},
   293  		[]string{`[{"constant":true,"inputs":[],"name":"transactString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":true,"inputs":[],"name":"deployString","outputs":[{"name":"","type":"string"}],"type":"function"},{"constant":false,"inputs":[{"name":"str","type":"string"}],"name":"transact","outputs":[],"type":"function"},{"inputs":[{"name":"str","type":"string"}],"type":"constructor"}]`},
   294  		`
   295  			"math/big"
   296  
   297  			"github.com/klaytn/klaytn/accounts/abi/bind"
   298  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   299  			"github.com/klaytn/klaytn/blockchain"
   300  			"github.com/klaytn/klaytn/crypto"
   301  		`,
   302  		`
   303  			// Generate a new random account and a funded simulator
   304  			key, _ := crypto.GenerateKey()
   305  			auth := bind.NewKeyedTransactor(key)
   306  
   307  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   308  			defer sim.Close()
   309  
   310  			// Deploy an interaction tester contract
   311  			_, _, interactor, err := DeployInteractor(auth, sim, "Deploy string")
   312  			if err != nil {
   313  				t.Fatalf("Failed to deploy interactor contract: %v", err)
   314  			}
   315  			sim.Commit()
   316  
   317  			// Publish Transact trasaction on a deployed contract
   318  			if _, err := interactor.Transact(auth, "Transact string"); err != nil {
   319  				t.Fatalf("Failed to transact with interactor contract: %v", err)
   320  			}
   321  			sim.Commit()
   322  
   323  			// Read deployString and transactString
   324  			if str, err := interactor.DeployString(nil); err != nil {
   325  				t.Fatalf("Failed to retrieve deploy string: %v", err)
   326  			} else if str != "Deploy string" {
   327  				t.Fatalf("Deploy string mismatch: have '%s', want 'Deploy string'", str)
   328  			}
   329  			if str, err := interactor.TransactString(nil); err != nil {
   330  				t.Fatalf("Failed to retrieve transact string: %v", err)
   331  			} else if str != "Transact string" {
   332  				t.Fatalf("Transact string mismatch: have '%s', want 'Transact string'", str)
   333  			}
   334  		`,
   335  		nil,
   336  		nil,
   337  		nil,
   338  		nil,
   339  	},
   340  	// Tests that plain values can be properly returned and deserialized
   341  	{
   342  		`Getter`,
   343  		`
   344  			contract Getter {
   345  				function getter() constant returns (string, int, bytes32) {
   346  					return ("Hi", 1, sha3(""));
   347  				}
   348  			}
   349  		`,
   350  		[]string{`606060405260dc8060106000396000f3606060405260e060020a6000350463993a04b78114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`},
   351  		[]string{`[{"constant":true,"inputs":[],"name":"getter","outputs":[{"name":"","type":"string"},{"name":"","type":"int256"},{"name":"","type":"bytes32"}],"type":"function"}]`},
   352  		`
   353  			"math/big"
   354  
   355  			"github.com/klaytn/klaytn/accounts/abi/bind"
   356  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   357  			"github.com/klaytn/klaytn/blockchain"
   358  			"github.com/klaytn/klaytn/crypto"
   359  		`,
   360  		`
   361  			// Generate a new random account and a funded simulator
   362  			key, _ := crypto.GenerateKey()
   363  			auth := bind.NewKeyedTransactor(key)
   364  
   365  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   366  			defer sim.Close()
   367  
   368  			// Deploy a tuple tester contract and execute a structured call on it
   369  			_, _, getter, err := DeployGetter(auth, sim)
   370  			if err != nil {
   371  				t.Fatalf("Failed to deploy getter contract: %v", err)
   372  			}
   373  			sim.Commit()
   374  
   375  			if str, num, _, err := getter.Getter(nil); err != nil {
   376  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
   377  			} else if str != "Hi" || num.Cmp(big.NewInt(1)) != 0 {
   378  				t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", str, num, "Hi", 1)
   379  			}
   380  		`,
   381  		nil,
   382  		nil,
   383  		nil,
   384  		nil,
   385  	},
   386  	// Tests that tuples can be properly returned and deserialized
   387  	{
   388  		`Tupler`,
   389  		`
   390  			contract Tupler {
   391  				function tuple() constant returns (string a, int b, bytes32 c) {
   392  					return ("Hi", 1, sha3(""));
   393  				}
   394  			}
   395  		`,
   396  		[]string{`606060405260dc8060106000396000f3606060405260e060020a60003504633175aae28114601a575b005b600060605260c0604052600260809081527f486900000000000000000000000000000000000000000000000000000000000060a05260017fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060e0829052610100819052606060c0908152600261012081905281906101409060a09080838184600060046012f1505081517fffff000000000000000000000000000000000000000000000000000000000000169091525050604051610160819003945092505050f3`},
   397  		[]string{`[{"constant":true,"inputs":[],"name":"tuple","outputs":[{"name":"a","type":"string"},{"name":"b","type":"int256"},{"name":"c","type":"bytes32"}],"type":"function"}]`},
   398  		`
   399  			"math/big"
   400  
   401  			"github.com/klaytn/klaytn/accounts/abi/bind"
   402  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   403  			"github.com/klaytn/klaytn/blockchain"
   404  			"github.com/klaytn/klaytn/crypto"
   405  		`,
   406  		`
   407  			// Generate a new random account and a funded simulator
   408  			key, _ := crypto.GenerateKey()
   409  			auth := bind.NewKeyedTransactor(key)
   410  
   411  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   412  			defer sim.Close()
   413  
   414  			// Deploy a tuple tester contract and execute a structured call on it
   415  			_, _, tupler, err := DeployTupler(auth, sim)
   416  			if err != nil {
   417  				t.Fatalf("Failed to deploy tupler contract: %v", err)
   418  			}
   419  			sim.Commit()
   420  
   421  			if res, err := tupler.Tuple(nil); err != nil {
   422  				t.Fatalf("Failed to call structure retriever: %v", err)
   423  			} else if res.A != "Hi" || res.B.Cmp(big.NewInt(1)) != 0 {
   424  				t.Fatalf("Retrieved value mismatch: have %v/%v, want %v/%v", res.A, res.B, "Hi", 1)
   425  			}
   426  		`,
   427  		nil,
   428  		nil,
   429  		nil,
   430  		nil,
   431  	},
   432  	// Tests that arrays/slices can be properly returned and deserialized.
   433  	// Only addresses are tested, remainder just compiled to keep the test small.
   434  	{
   435  		`Slicer`,
   436  		`
   437  			contract Slicer {
   438  				function echoAddresses(address[] input) constant returns (address[] output) {
   439  					return input;
   440  				}
   441  				function echoInts(int[] input) constant returns (int[] output) {
   442  					return input;
   443  				}
   444  				function echoFancyInts(uint24[23] input) constant returns (uint24[23] output) {
   445  					return input;
   446  				}
   447  				function echoBools(bool[] input) constant returns (bool[] output) {
   448  					return input;
   449  				}
   450  			}
   451  		`,
   452  		[]string{`606060405261015c806100126000396000f3606060405260e060020a6000350463be1127a3811461003c578063d88becc014610092578063e15a3db71461003c578063f637e5891461003c575b005b604080516020600480358082013583810285810185019096528085526100ee959294602494909392850192829185019084908082843750949650505050505050604080516020810190915260009052805b919050565b604080516102e0818101909252610138916004916102e491839060179083908390808284375090955050505050506102e0604051908101604052806017905b60008152602001906001900390816100d15790505081905061008d565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600f02600301f1509050019250505060405180910390f35b60405180826102e0808381846000600461015cf15090500191505060405180910390f3`},
   453  		[]string{`[{"constant":true,"inputs":[{"name":"input","type":"address[]"}],"name":"echoAddresses","outputs":[{"name":"output","type":"address[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"uint24[23]"}],"name":"echoFancyInts","outputs":[{"name":"output","type":"uint24[23]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"int256[]"}],"name":"echoInts","outputs":[{"name":"output","type":"int256[]"}],"type":"function"},{"constant":true,"inputs":[{"name":"input","type":"bool[]"}],"name":"echoBools","outputs":[{"name":"output","type":"bool[]"}],"type":"function"}]`},
   454  		`
   455  			"math/big"
   456  			"reflect"
   457  
   458  			"github.com/klaytn/klaytn/accounts/abi/bind"
   459  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   460  			"github.com/klaytn/klaytn/common"
   461  			"github.com/klaytn/klaytn/blockchain"
   462  			"github.com/klaytn/klaytn/crypto"
   463  		`,
   464  		`
   465  			// Generate a new random account and a funded simulator
   466  			key, _ := crypto.GenerateKey()
   467  			auth := bind.NewKeyedTransactor(key)
   468  
   469  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   470  			defer sim.Close()
   471  
   472  			// Deploy a slice tester contract and execute a n array call on it
   473  			_, _, slicer, err := DeploySlicer(auth, sim)
   474  			if err != nil {
   475  					t.Fatalf("Failed to deploy slicer contract: %v", err)
   476  			}
   477  			sim.Commit()
   478  
   479  			if out, err := slicer.EchoAddresses(nil, []common.Address{auth.From, common.Address{}}); err != nil {
   480  					t.Fatalf("Failed to call slice echoer: %v", err)
   481  			} else if !reflect.DeepEqual(out, []common.Address{auth.From, common.Address{}}) {
   482  					t.Fatalf("Slice return mismatch: have %v, want %v", out, []common.Address{auth.From, common.Address{}})
   483  			}
   484  		`,
   485  		nil,
   486  		nil,
   487  		nil,
   488  		nil,
   489  	},
   490  	// Tests that anonymous default methods can be correctly invoked
   491  	{
   492  		`Defaulter`,
   493  		`
   494  			contract Defaulter {
   495  				address public caller;
   496  
   497  				function() {
   498  					caller = msg.sender;
   499  				}
   500  			}
   501  		`,
   502  		[]string{`6060604052606a8060106000396000f360606040523615601d5760e060020a6000350463fc9c8d3981146040575b605e6000805473ffffffffffffffffffffffffffffffffffffffff191633179055565b606060005473ffffffffffffffffffffffffffffffffffffffff1681565b005b6060908152602090f3`},
   503  		[]string{`[{"constant":true,"inputs":[],"name":"caller","outputs":[{"name":"","type":"address"}],"type":"function"}]`},
   504  		`
   505  			"math/big"
   506  
   507  			"github.com/klaytn/klaytn/accounts/abi/bind"
   508  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   509  			"github.com/klaytn/klaytn/blockchain"
   510  			"github.com/klaytn/klaytn/crypto"
   511  		`,
   512  		`
   513  			// Generate a new random account and a funded simulator
   514  			key, _ := crypto.GenerateKey()
   515  			auth := bind.NewKeyedTransactor(key)
   516  
   517  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   518  			defer sim.Close()
   519  
   520  			// Deploy a default method invoker contract 
   521  			_, _, defaulter, err := DeployDefaulter(auth, sim)
   522  			if err != nil {
   523  				t.Fatalf("Failed to deploy defaulter contract: %v", err)
   524  			}
   525  			sim.Commit()
   526  
   527  			// Publish Transfer trasaction on deployed contract
   528  			if _, err := (&DefaulterRaw{defaulter}).Transfer(auth); err != nil {
   529  				t.Fatalf("Failed to invoke default method: %v", err)
   530  			}
   531  			sim.Commit()
   532  
   533  			if caller, err := defaulter.Caller(nil); err != nil {
   534  				t.Fatalf("Failed to call address retriever: %v", err)
   535  			} else if (caller != auth.From) {
   536  				t.Fatalf("Address mismatch: have %v, want %v", caller, auth.From)
   537  			}
   538  		`,
   539  		nil,
   540  		nil,
   541  		nil,
   542  		nil,
   543  	},
   544  	// Tests that structs are correctly unpacked
   545  	{
   546  		`Structs`,
   547  		`
   548  		pragma solidity ^0.6.5;
   549  			pragma experimental ABIEncoderV2;
   550  			contract Structs {
   551  				struct A {
   552  					bytes32 B;
   553  				}
   554  				
   555  				function F() public view returns (A[] memory a, uint256[] memory c, bool[] memory d) {
   556  					A[] memory a = new A[](2);
   557  					a[0].B = bytes32(uint256(1234) << 96);
   558  					uint256[] memory c;
   559  					bool[] memory d;
   560  					return (a, c, d);
   561  				}
   562  			
   563  				function G() public view returns (A[] memory a) {
   564  					A[] memory a = new A[](2);
   565  					a[0].B = bytes32(uint256(1234) << 96);
   566  					return a;
   567  				}
   568  			}
   569  		`,
   570  		[]string{`608060405234801561001057600080fd5b50610278806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806328811f591461003b5780636fecb6231461005b575b600080fd5b610043610070565b604051610052939291906101a0565b60405180910390f35b6100636100d6565b6040516100529190610186565b604080516002808252606082810190935282918291829190816020015b610095610131565b81526020019060019003908161008d575050805190915061026960611b9082906000906100be57fe5b60209081029190910101515293606093508392509050565b6040805160028082526060828101909352829190816020015b6100f7610131565b8152602001906001900390816100ef575050805190915061026960611b90829060009061012057fe5b602090810291909101015152905090565b60408051602081019091526000815290565b815260200190565b6000815180845260208085019450808401835b8381101561017b578151518752958201959082019060010161015e565b509495945050505050565b600060208252610199602083018461014b565b9392505050565b6000606082526101b3606083018661014b565b6020838203818501528186516101c98185610239565b91508288019350845b818110156101f3576101e5838651610143565b9484019492506001016101d2565b505084810360408601528551808252908201925081860190845b8181101561022b57825115158552938301939183019160010161020d565b509298975050505050505050565b9081526020019056fea2646970667358221220eb85327e285def14230424c52893aebecec1e387a50bb6b75fc4fdbed647f45f64736f6c63430006050033`},
   571  		[]string{`[{"inputs":[],"name":"F","outputs":[{"components":[{"internalType":"bytes32","name":"B","type":"bytes32"}],"internalType":"structStructs.A[]","name":"a","type":"tuple[]"},{"internalType":"uint256[]","name":"c","type":"uint256[]"},{"internalType":"bool[]","name":"d","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"G","outputs":[{"components":[{"internalType":"bytes32","name":"B","type":"bytes32"}],"internalType":"structStructs.A[]","name":"a","type":"tuple[]"}],"stateMutability":"view","type":"function"}]`},
   572  		`
   573  			"math/big"
   574  
   575  			"github.com/klaytn/klaytn/accounts/abi/bind"
   576  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   577  			"github.com/klaytn/klaytn/blockchain"
   578  			"github.com/klaytn/klaytn/crypto"
   579  		`,
   580  		`
   581  			// Generate a new random account and a funded simulator
   582  			key, _ := crypto.GenerateKey()
   583  			auth := bind.NewKeyedTransactor(key)
   584  
   585  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   586  			defer sim.Close()
   587  		
   588  		
   589  			// Deploy a structs method invoker contract and execute its default method
   590  			_, _, structs, err := DeployStructs(auth, sim)
   591  			if err != nil {
   592  				t.Fatalf("Failed to deploy defaulter contract: %v", err)
   593  			}
   594  			sim.Commit()
   595  			opts := bind.CallOpts{}
   596  			if _, err := structs.F(&opts); err != nil {
   597  				t.Fatalf("Failed to invoke F method: %v", err)
   598  			}
   599  			if _, err := structs.G(&opts); err != nil {
   600  				t.Fatalf("Failed to invoke G method: %v", err)
   601  			}
   602  		`,
   603  		nil,
   604  		nil,
   605  		nil,
   606  		nil,
   607  	},
   608  	// Tests that non-existent contracts are reported as such (though only simulator test)
   609  	{
   610  		`NonExistent`,
   611  		`
   612  			contract NonExistent {
   613  				function String() constant returns(string) {
   614  					return "I don't exist";
   615  				}
   616  			}
   617  		`,
   618  		[]string{`6060604052609f8060106000396000f3606060405260e060020a6000350463f97a60058114601a575b005b600060605260c0604052600d60809081527f4920646f6e27742065786973740000000000000000000000000000000000000060a052602060c0908152600d60e081905281906101009060a09080838184600060046012f15050815172ffffffffffffffffffffffffffffffffffffff1916909152505060405161012081900392509050f3`},
   619  		[]string{`[{"constant":true,"inputs":[],"name":"String","outputs":[{"name":"","type":"string"}],"type":"function"}]`},
   620  		`
   621  			"github.com/klaytn/klaytn/accounts/abi/bind"
   622  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   623  			"github.com/klaytn/klaytn/blockchain"
   624  			"github.com/klaytn/klaytn/common"
   625  		`,
   626  		`
   627  			// Create a simulator and wrap a non-deployed contract
   628  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{})
   629  			defer sim.Close()
   630  
   631  			nonexistent, err := NewNonExistent(common.Address{}, sim)
   632  			if err != nil {
   633  				t.Fatalf("Failed to access non-existent contract: %v", err)
   634  			}
   635  			// Ensure that contract calls fail with the appropriate error
   636  			if res, err := nonexistent.String(nil); err == nil {
   637  				t.Fatalf("Call succeeded on non-existent contract: %v", res)
   638  			} else if (err != bind.ErrNoCode) {
   639  				t.Fatalf("Error mismatch: have %v, want %v", err, bind.ErrNoCode)
   640  			}
   641  		`,
   642  		nil,
   643  		nil,
   644  		nil,
   645  		nil,
   646  	},
   647  	// Tests that gas estimation works for contracts with weird gas mechanics too.
   648  	{
   649  		`FunkyGasPattern`,
   650  		`
   651  			contract FunkyGasPattern {
   652  				string public field;
   653  
   654  				function SetField(string value) {
   655  					// This check will screw gas estimation! Good, good!
   656  					if (msg.gas < 100000) {
   657  						throw;
   658  					}
   659  					field = value;
   660  				}
   661  			}
   662  		`,
   663  		[]string{`606060405261021c806100126000396000f3606060405260e060020a600035046323fcf32a81146100265780634f28bf0e1461007b575b005b6040805160206004803580820135601f8101849004840285018401909552848452610024949193602493909291840191908190840183828082843750949650505050505050620186a05a101561014e57610002565b6100db60008054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281529291908301828280156102145780601f106101e957610100808354040283529160200191610214565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561013b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b505050565b8060006000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106101b557805160ff19168380011785555b506101499291505b808211156101e557600081556001016101a1565b82800160010185558215610199579182015b828111156101995782518260005055916020019190600101906101c7565b5090565b820191906000526020600020905b8154815290600101906020018083116101f757829003601f168201915b50505050508156`},
   664  		[]string{`[{"constant":false,"inputs":[{"name":"value","type":"string"}],"name":"SetField","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"field","outputs":[{"name":"","type":"string"}],"type":"function"}]`},
   665  		`
   666  			"math/big"
   667  
   668  			"github.com/klaytn/klaytn/accounts/abi/bind"
   669  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   670  			"github.com/klaytn/klaytn/blockchain"
   671  			"github.com/klaytn/klaytn/crypto"
   672  		`,
   673  		`
   674  			// Generate a new random account and a funded simulator
   675  			key, _ := crypto.GenerateKey()
   676  			auth := bind.NewKeyedTransactor(key)
   677  
   678  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   679  			defer sim.Close()
   680  
   681  			// Deploy a funky gas pattern contract
   682  			_, _, limiter, err := DeployFunkyGasPattern(auth, sim)
   683  			if err != nil {
   684  				t.Fatalf("Failed to deploy funky contract: %v", err)
   685  			}
   686  			sim.Commit()
   687  
   688  			// Set the field with automatic estimation and check that it succeeds
   689  			if _, err := limiter.SetField(auth, "automatic"); err != nil {
   690  				t.Fatalf("Failed to call automatically gased transaction: %v", err)
   691  			}
   692  			sim.Commit()
   693  
   694  			if field, _ := limiter.Field(nil); field != "automatic" {
   695  				t.Fatalf("Field mismatch: have %v, want %v", field, "automatic")
   696  			}
   697  		`,
   698  		nil,
   699  		nil,
   700  		nil,
   701  		nil,
   702  	},
   703  	// Test that constant functions can be called from an (optional) specified address
   704  	{
   705  		`CallFrom`,
   706  		`
   707  			contract CallFrom {
   708  				function callFrom() constant returns(address) {
   709  					return msg.sender;
   710  				}
   711  			}
   712  		`,
   713  		[]string{`6060604052346000575b6086806100176000396000f300606060405263ffffffff60e060020a60003504166349f8e98281146022575b6000565b34600057602c6055565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b335b905600a165627a7a72305820aef6b7685c0fa24ba6027e4870404a57df701473fe4107741805c19f5138417c0029`},
   714  		[]string{`[{"constant":true,"inputs":[],"name":"callFrom","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"}]`},
   715  		`
   716  			"math/big"
   717  
   718  			"github.com/klaytn/klaytn/accounts/abi/bind"
   719  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   720  			"github.com/klaytn/klaytn/common"
   721  			"github.com/klaytn/klaytn/blockchain"
   722  			"github.com/klaytn/klaytn/crypto"
   723  		`,
   724  		`
   725  			// Generate a new random account and a funded simulator
   726  			key, _ := crypto.GenerateKey()
   727  			auth := bind.NewKeyedTransactor(key)
   728  
   729  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   730  			defer sim.Close()
   731  
   732  			// Deploy a sender tester contract and execute a structured call on it
   733  			_, _, callfrom, err := DeployCallFrom(auth, sim)
   734  			if err != nil {
   735  				t.Fatalf("Failed to deploy sender contract: %v", err)
   736  			}
   737  			sim.Commit()
   738  
   739  			if res, err := callfrom.CallFrom(nil); err != nil {
   740  				t.Errorf("Failed to call constant function: %v", err)
   741  			} else if res != (common.Address{}) {
   742  				t.Errorf("Invalid address returned, want: %x, got: %x", (common.Address{}), res)
   743  			}
   744  
   745  			for _, addr := range []common.Address{common.Address{}, common.Address{1}, common.Address{2}} {
   746  				if res, err := callfrom.CallFrom(&bind.CallOpts{From: addr}); err != nil {
   747  					t.Fatalf("Failed to call constant function: %v", err)
   748  				} else if res != addr {
   749  					t.Fatalf("Invalid address returned, want: %x, got: %x", addr, res)
   750  				}
   751  			}
   752  		`,
   753  		nil,
   754  		nil,
   755  		nil,
   756  		nil,
   757  	},
   758  	// Tests that methods and returns with underscores inside work correctly.
   759  	{
   760  		`Underscorer`,
   761  		`
   762  		contract Underscorer {
   763  			function UnderscoredOutput() constant returns (int _int, string _string) {
   764  				return (314, "pi");
   765  			}
   766  			function LowerLowerCollision() constant returns (int _res, int res) {
   767  				return (1, 2);
   768  			}
   769  			function LowerUpperCollision() constant returns (int _res, int Res) {
   770  				return (1, 2);
   771  			}
   772  			function UpperLowerCollision() constant returns (int _Res, int res) {
   773  				return (1, 2);
   774  			}
   775  			function UpperUpperCollision() constant returns (int _Res, int Res) {
   776  				return (1, 2);
   777  			}
   778  			function PurelyUnderscoredOutput() constant returns (int _, int res) {
   779  				return (1, 2);
   780  			}
   781  			function AllPurelyUnderscoredOutput() constant returns (int _, int __) {
   782  				return (1, 2);
   783  			}
   784  			function _under_scored_func() constant returns (int _int) {
   785  				return 0;
   786  			}
   787  		}
   788  		`,
   789  		[]string{`6060604052341561000f57600080fd5b6103858061001e6000396000f30060606040526004361061008e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303a592131461009357806346546dbe146100c357806367e6633d146100ec5780639df4848514610181578063af7486ab146101b1578063b564b34d146101e1578063e02ab24d14610211578063e409ca4514610241575b600080fd5b341561009e57600080fd5b6100a6610271565b604051808381526020018281526020019250505060405180910390f35b34156100ce57600080fd5b6100d6610286565b6040518082815260200191505060405180910390f35b34156100f757600080fd5b6100ff61028e565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561014557808201518184015260208101905061012a565b50505050905090810190601f1680156101725780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b341561018c57600080fd5b6101946102dc565b604051808381526020018281526020019250505060405180910390f35b34156101bc57600080fd5b6101c46102f1565b604051808381526020018281526020019250505060405180910390f35b34156101ec57600080fd5b6101f4610306565b604051808381526020018281526020019250505060405180910390f35b341561021c57600080fd5b61022461031b565b604051808381526020018281526020019250505060405180910390f35b341561024c57600080fd5b610254610330565b604051808381526020018281526020019250505060405180910390f35b60008060016002819150809050915091509091565b600080905090565b6000610298610345565b61013a8090506040805190810160405280600281526020017f7069000000000000000000000000000000000000000000000000000000000000815250915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b60008060016002819150809050915091509091565b6020604051908101604052806000815250905600a165627a7a72305820d1a53d9de9d1e3d55cb3dc591900b63c4f1ded79114f7b79b332684840e186a40029`},
   790  		[]string{`[{"constant":true,"inputs":[],"name":"LowerUpperCollision","outputs":[{"name":"_res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_under_scored_func","outputs":[{"name":"_int","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UnderscoredOutput","outputs":[{"name":"_int","type":"int256"},{"name":"_string","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperLowerCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"AllPurelyUnderscoredOutput","outputs":[{"name":"_","type":"int256"},{"name":"__","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UpperUpperCollision","outputs":[{"name":"_Res","type":"int256"},{"name":"Res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LowerLowerCollision","outputs":[{"name":"_res","type":"int256"},{"name":"res","type":"int256"}],"payable":false,"stateMutability":"view","type":"function"}]`},
   791  		`
   792  			"fmt"
   793  			"math/big"
   794  
   795  			"github.com/klaytn/klaytn/accounts/abi/bind"
   796  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   797  			"github.com/klaytn/klaytn/blockchain"
   798  			"github.com/klaytn/klaytn/crypto"
   799  		`,
   800  		`
   801  			// Generate a new random account and a funded simulator
   802  			key, _ := crypto.GenerateKey()
   803  			auth := bind.NewKeyedTransactor(key)
   804  
   805  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   806  			defer sim.Close()
   807  
   808  			// Deploy a underscorer tester contract and execute a structured call on it
   809  			_, _, underscorer, err := DeployUnderscorer(auth, sim)
   810  			if err != nil {
   811  				t.Fatalf("Failed to deploy underscorer contract: %v", err)
   812  			}
   813  			sim.Commit()
   814  
   815  			// Verify that underscored return values correctly parse into structs
   816  			if res, err := underscorer.UnderscoredOutput(nil); err != nil {
   817  				t.Errorf("Failed to call constant function: %v", err)
   818  			} else if res.Int.Cmp(big.NewInt(314)) != 0 || res.String != "pi" {
   819  				t.Errorf("Invalid result, want: {314, \"pi\"}, got: %+v", res)
   820  			}
   821  			// Verify that underscored and non-underscored name collisions force tuple outputs
   822  			var a, b *big.Int
   823  
   824  			a, b, _ = underscorer.LowerLowerCollision(nil)
   825  			a, b, _ = underscorer.LowerUpperCollision(nil)
   826  			a, b, _ = underscorer.UpperLowerCollision(nil)
   827  			a, b, _ = underscorer.UpperUpperCollision(nil)
   828  			a, b, _ = underscorer.PurelyUnderscoredOutput(nil)
   829  			a, b, _ = underscorer.AllPurelyUnderscoredOutput(nil)
   830  			a, _ = underscorer.UnderScoredFunc(nil)
   831  
   832  			fmt.Println(a, b, err)
   833  		`,
   834  		nil,
   835  		nil,
   836  		nil,
   837  		nil,
   838  	},
   839  	// Tests that logs can be successfully filtered and decoded.
   840  	{
   841  		`Eventer`,
   842  		`
   843  			contract Eventer {
   844  				event SimpleEvent (
   845  					address indexed Addr,
   846  					bytes32 indexed Id,
   847  					bool    indexed Flag,
   848  					uint    Value
   849  				);
   850  				function raiseSimpleEvent(address addr, bytes32 id, bool flag, uint value) {
   851  					SimpleEvent(addr, id, flag, value);
   852  				}
   853  
   854  				event NodataEvent (
   855  					uint   indexed Number,
   856  					int16  indexed Short,
   857  					uint32 indexed Long
   858  				);
   859  				function raiseNodataEvent(uint number, int16 short, uint32 long) {
   860  					NodataEvent(number, short, long);
   861  				}
   862  
   863  				event DynamicEvent (
   864  					string indexed IndexedString,
   865  					bytes  indexed IndexedBytes,
   866  					string NonIndexedString,
   867  					bytes  NonIndexedBytes
   868  				);
   869  				function raiseDynamicEvent(string str, bytes blob) {
   870  					DynamicEvent(str, blob, str, blob);
   871  				}
   872  
   873  				event FixedBytesEvent (
   874  					bytes24 indexed IndexedBytes,
   875  					bytes24 NonIndexedBytes
   876  				);
   877  				function raiseFixedBytesEvent(bytes24 blob) {
   878  					FixedBytesEvent(blob, blob);
   879  				}
   880  			}
   881  		`,
   882  		[]string{`608060405234801561001057600080fd5b5061043f806100206000396000f3006080604052600436106100615763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663528300ff8114610066578063630c31e2146100ff5780636cc6b94014610138578063c7d116dd1461015b575b600080fd5b34801561007257600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526100fd94369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a9998810197919650918201945092508291508401838280828437509497506101829650505050505050565b005b34801561010b57600080fd5b506100fd73ffffffffffffffffffffffffffffffffffffffff60043516602435604435151560643561033c565b34801561014457600080fd5b506100fd67ffffffffffffffff1960043516610394565b34801561016757600080fd5b506100fd60043560243560010b63ffffffff604435166103d6565b806040518082805190602001908083835b602083106101b25780518252601f199092019160209182019101610193565b51815160209384036101000a6000190180199092169116179052604051919093018190038120875190955087945090928392508401908083835b6020831061020b5780518252601f1990920191602091820191016101ec565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405180910390207f3281fd4f5e152dd3385df49104a3f633706e21c9e80672e88d3bcddf33101f008484604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561029c578181015183820152602001610284565b50505050905090810190601f1680156102c95780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156102fc5781810151838201526020016102e4565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a35050565b60408051828152905183151591859173ffffffffffffffffffffffffffffffffffffffff8816917f1f097de4289df643bd9c11011cc61367aa12983405c021056e706eb5ba1250c8919081900360200190a450505050565b6040805167ffffffffffffffff19831680825291517fcdc4c1b1aed5524ffb4198d7a5839a34712baef5fa06884fac7559f4a5854e0a9181900360200190a250565b8063ffffffff168260010b847f3ca7f3a77e5e6e15e781850bc82e32adfa378a2a609370db24b4d0fae10da2c960405160405180910390a45050505600a165627a7a72305820468b5843bf653145bd924b323c64ef035d3dd922c170644b44d61aa666ea6eee0029`},
   883  		[]string{`[{"constant":false,"inputs":[{"name":"str","type":"string"},{"name":"blob","type":"bytes"}],"name":"raiseDynamicEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"id","type":"bytes32"},{"name":"flag","type":"bool"},{"name":"value","type":"uint256"}],"name":"raiseSimpleEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blob","type":"bytes24"}],"name":"raiseFixedBytesEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"number","type":"uint256"},{"name":"short","type":"int16"},{"name":"long","type":"uint32"}],"name":"raiseNodataEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Addr","type":"address"},{"indexed":true,"name":"Id","type":"bytes32"},{"indexed":true,"name":"Flag","type":"bool"},{"indexed":false,"name":"Value","type":"uint256"}],"name":"SimpleEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"Number","type":"uint256"},{"indexed":true,"name":"Short","type":"int16"},{"indexed":true,"name":"Long","type":"uint32"}],"name":"NodataEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedString","type":"string"},{"indexed":true,"name":"IndexedBytes","type":"bytes"},{"indexed":false,"name":"NonIndexedString","type":"string"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes"}],"name":"DynamicEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"IndexedBytes","type":"bytes24"},{"indexed":false,"name":"NonIndexedBytes","type":"bytes24"}],"name":"FixedBytesEvent","type":"event"}]`},
   884  		`
   885  			"math/big"
   886  			"time"
   887  
   888  			"github.com/klaytn/klaytn/accounts/abi/bind"
   889  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
   890  			"github.com/klaytn/klaytn/common"
   891  			"github.com/klaytn/klaytn/blockchain"
   892  			"github.com/klaytn/klaytn/crypto"
   893  		`,
   894  		`
   895  			// Generate a new random account and a funded simulator
   896  			key, _ := crypto.GenerateKey()
   897  			auth := bind.NewKeyedTransactor(key)
   898  
   899  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
   900  			defer sim.Close()
   901  
   902  			// Deploy an eventer contract
   903  			_, _, eventer, err := DeployEventer(auth, sim)
   904  			if err != nil {
   905  				t.Fatalf("Failed to deploy eventer contract: %v", err)
   906  			}
   907  			sim.Commit()
   908  
   909  			// Inject a few events into the contract, gradually more in each block
   910  			for i := 1; i <= 3; i++ {
   911  				for j := 1; j <= i; j++ {
   912  					if _, err := eventer.RaiseSimpleEvent(auth, common.Address{byte(j)}, [32]byte{byte(j)}, true, big.NewInt(int64(10*i+j))); err != nil {
   913  						t.Fatalf("block %d, event %d: raise failed: %v", i, j, err)
   914  					}
   915  				}
   916  				sim.Commit()
   917  			}
   918  			// Test filtering for certain events and ensure they can be found
   919  			sit, err := eventer.FilterSimpleEvent(nil, []common.Address{common.Address{1}, common.Address{3}}, [][32]byte{{byte(1)}, {byte(2)}, {byte(3)}}, []bool{true})
   920  			if err != nil {
   921  				t.Fatalf("failed to filter for simple events: %v", err)
   922  			}
   923  			defer sit.Close()
   924  
   925  			sit.Next()
   926  			if sit.Event.Value.Uint64() != 11 || !sit.Event.Flag {
   927  				t.Errorf("simple log content mismatch: have %v, want {11, true}", sit.Event)
   928  			}
   929  			sit.Next()
   930  			if sit.Event.Value.Uint64() != 21 || !sit.Event.Flag {
   931  				t.Errorf("simple log content mismatch: have %v, want {21, true}", sit.Event)
   932  			}
   933  			sit.Next()
   934  			if sit.Event.Value.Uint64() != 31 || !sit.Event.Flag {
   935  				t.Errorf("simple log content mismatch: have %v, want {31, true}", sit.Event)
   936  			}
   937  			sit.Next()
   938  			if sit.Event.Value.Uint64() != 33 || !sit.Event.Flag {
   939  				t.Errorf("simple log content mismatch: have %v, want {33, true}", sit.Event)
   940  			}
   941  
   942  			if sit.Next() {
   943  				t.Errorf("unexpected simple event found: %+v", sit.Event)
   944  			}
   945  			if err = sit.Error(); err != nil {
   946  				t.Fatalf("simple event iteration failed: %v", err)
   947  			}
   948  			// Test raising and filtering for an event with no data component
   949  			if _, err := eventer.RaiseNodataEvent(auth, big.NewInt(314), 141, 271); err != nil {
   950  				t.Fatalf("failed to raise nodata event: %v", err)
   951  			}
   952  			sim.Commit()
   953  
   954  			nit, err := eventer.FilterNodataEvent(nil, []*big.Int{big.NewInt(314)}, []int16{140, 141, 142}, []uint32{271})
   955  			if err != nil {
   956  				t.Fatalf("failed to filter for nodata events: %v", err)
   957  			}
   958  			defer nit.Close()
   959  
   960  			if !nit.Next() {
   961  				t.Fatalf("nodata log not found: %v", nit.Error())
   962  			}
   963  			if nit.Event.Number.Uint64() != 314 {
   964  				t.Errorf("nodata log content mismatch: have %v, want 314", nit.Event.Number)
   965  			}
   966  			if nit.Next() {
   967  				t.Errorf("unexpected nodata event found: %+v", nit.Event)
   968  			}
   969  			if err = nit.Error(); err != nil {
   970  				t.Fatalf("nodata event iteration failed: %v", err)
   971  			}
   972  			// Test raising and filtering for events with dynamic indexed components
   973  			if _, err := eventer.RaiseDynamicEvent(auth, "Hello", []byte("World")); err != nil {
   974  				t.Fatalf("failed to raise dynamic event: %v", err)
   975  			}
   976  			sim.Commit()
   977  
   978  			dit, err := eventer.FilterDynamicEvent(nil, []string{"Hi", "Hello", "Bye"}, [][]byte{[]byte("World")})
   979  			if err != nil {
   980  				t.Fatalf("failed to filter for dynamic events: %v", err)
   981  			}
   982  			defer dit.Close()
   983  
   984  			if !dit.Next() {
   985  				t.Fatalf("dynamic log not found: %v", dit.Error())
   986  			}
   987  			if dit.Event.NonIndexedString != "Hello" || string(dit.Event.NonIndexedBytes) != "World" ||	dit.Event.IndexedString != common.HexToHash("0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2") || dit.Event.IndexedBytes != common.HexToHash("0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18") {
   988  				t.Errorf("dynamic log content mismatch: have %v, want {'0x06b3dfaec148fb1bb2b066f10ec285e7c9bf402ab32aa78a5d38e34566810cd2, '0xf2208c967df089f60420785795c0a9ba8896b0f6f1867fa7f1f12ad6f79c1a18', 'Hello', 'World'}", dit.Event)
   989  			}
   990  			if dit.Next() {
   991  				t.Errorf("unexpected dynamic event found: %+v", dit.Event)
   992  			}
   993  			if err = dit.Error(); err != nil {
   994  				t.Fatalf("dynamic event iteration failed: %v", err)
   995  			}
   996  			// Test raising and filtering for events with fixed bytes components
   997  			var fblob [24]byte
   998  			copy(fblob[:], []byte("Fixed Bytes"))
   999  
  1000  			if _, err := eventer.RaiseFixedBytesEvent(auth, fblob); err != nil {
  1001  				t.Fatalf("failed to raise fixed bytes event: %v", err)
  1002  			}
  1003  			sim.Commit()
  1004  
  1005  			fit, err := eventer.FilterFixedBytesEvent(nil, [][24]byte{fblob})
  1006  			if err != nil {
  1007  				t.Fatalf("failed to filter for fixed bytes events: %v", err)
  1008  			}
  1009  			defer fit.Close()
  1010  
  1011  			if !fit.Next() {
  1012  				t.Fatalf("fixed bytes log not found: %v", fit.Error())
  1013  			}
  1014  			if fit.Event.NonIndexedBytes != fblob || fit.Event.IndexedBytes != fblob {
  1015  				t.Errorf("fixed bytes log content mismatch: have %v, want {'%x', '%x'}", fit.Event, fblob, fblob)
  1016  			}
  1017  			if fit.Next() {
  1018  				t.Errorf("unexpected fixed bytes event found: %+v", fit.Event)
  1019  			}
  1020  			if err = fit.Error(); err != nil {
  1021  				t.Fatalf("fixed bytes event iteration failed: %v", err)
  1022  			}
  1023  			// Test subscribing to an event and raising it afterwards
  1024  			ch := make(chan *EventerSimpleEvent, 16)
  1025  			sub, err := eventer.WatchSimpleEvent(nil, ch, nil, nil, nil)
  1026  			if err != nil {
  1027  				t.Fatalf("failed to subscribe to simple events: %v", err)
  1028  			}
  1029  			if _, err := eventer.RaiseSimpleEvent(auth, common.Address{255}, [32]byte{255}, true, big.NewInt(255)); err != nil {
  1030  				t.Fatalf("failed to raise subscribed simple event: %v", err)
  1031  			}
  1032  			sim.Commit()
  1033  
  1034  			select {
  1035  			case event := <-ch:
  1036  				if event.Value.Uint64() != 255 {
  1037  					t.Errorf("simple log content mismatch: have %v, want 255", event)
  1038  				}
  1039  			case <-time.After(250 * time.Millisecond):
  1040  				t.Fatalf("subscribed simple event didn't arrive")
  1041  			}
  1042  			// Unsubscribe from the event and make sure we're not delivered more
  1043  			sub.Unsubscribe()
  1044  
  1045  			if _, err := eventer.RaiseSimpleEvent(auth, common.Address{254}, [32]byte{254}, true, big.NewInt(254)); err != nil {
  1046  				t.Fatalf("failed to raise subscribed simple event: %v", err)
  1047  			}
  1048  			sim.Commit()
  1049  
  1050  			select {
  1051  			case event := <-ch:
  1052  				t.Fatalf("unsubscribed simple event arrived: %v", event)
  1053  			case <-time.After(250 * time.Millisecond):
  1054  			}
  1055  		`,
  1056  		nil,
  1057  		nil,
  1058  		nil,
  1059  		nil,
  1060  	},
  1061  	{
  1062  		`DeeplyNestedArray`,
  1063  		`
  1064  			contract DeeplyNestedArray {
  1065  				uint64[3][4][5] public deepUint64Array;
  1066  				function storeDeepUintArray(uint64[3][4][5] arr) public {
  1067  					deepUint64Array = arr;
  1068  				}
  1069  				function retrieveDeepArray() public view returns (uint64[3][4][5]) {
  1070  					return deepUint64Array;
  1071  				}
  1072  			}
  1073  		`,
  1074  		[]string{`6060604052341561000f57600080fd5b6106438061001e6000396000f300606060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063344248551461005c5780638ed4573a1461011457806398ed1856146101ab575b600080fd5b341561006757600080fd5b610112600480806107800190600580602002604051908101604052809291906000905b828210156101055783826101800201600480602002604051908101604052809291906000905b828210156100f25783826060020160038060200260405190810160405280929190826003602002808284378201915050505050815260200190600101906100b0565b505050508152602001906001019061008a565b5050505091905050610208565b005b341561011f57600080fd5b61012761021d565b604051808260056000925b8184101561019b578284602002015160046000925b8184101561018d5782846020020151600360200280838360005b8381101561017c578082015181840152602081019050610161565b505050509050019260010192610147565b925050509260010192610132565b9250505091505060405180910390f35b34156101b657600080fd5b6101de6004808035906020019091908035906020019091908035906020019091905050610309565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b80600090600561021992919061035f565b5050565b6102256103b0565b6000600580602002604051908101604052809291906000905b8282101561030057838260040201600480602002604051908101604052809291906000905b828210156102ed578382016003806020026040519081016040528092919082600380156102d9576020028201916000905b82829054906101000a900467ffffffffffffffff1667ffffffffffffffff16815260200190600801906020826007010492830192600103820291508084116102945790505b505050505081526020019060010190610263565b505050508152602001906001019061023e565b50505050905090565b60008360058110151561031857fe5b600402018260048110151561032957fe5b018160038110151561033757fe5b6004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b826005600402810192821561039f579160200282015b8281111561039e5782518290600461038e9291906103df565b5091602001919060040190610375565b5b5090506103ac919061042d565b5090565b610780604051908101604052806005905b6103c9610459565b8152602001906001900390816103c15790505090565b826004810192821561041c579160200282015b8281111561041b5782518290600361040b929190610488565b50916020019190600101906103f2565b5b5090506104299190610536565b5090565b61045691905b8082111561045257600081816104499190610562565b50600401610433565b5090565b90565b610180604051908101604052806004905b6104726105a7565b81526020019060019003908161046a5790505090565b82600380016004900481019282156105255791602002820160005b838211156104ef57835183826101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555092602001926008016020816007010492830192600103026104a3565b80156105235782816101000a81549067ffffffffffffffff02191690556008016020816007010492830192600103026104ef565b505b50905061053291906105d9565b5090565b61055f91905b8082111561055b57600081816105529190610610565b5060010161053c565b5090565b90565b50600081816105719190610610565b50600101600081816105839190610610565b50600101600081816105959190610610565b5060010160006105a59190610610565b565b6060604051908101604052806003905b600067ffffffffffffffff168152602001906001900390816105b75790505090565b61060d91905b8082111561060957600081816101000a81549067ffffffffffffffff0219169055506001016105df565b5090565b90565b50600090555600a165627a7a7230582087e5a43f6965ab6ef7a4ff056ab80ed78fd8c15cff57715a1bf34ec76a93661c0029`},
  1075  		[]string{`[{"constant":false,"inputs":[{"name":"arr","type":"uint64[3][4][5]"}],"name":"storeDeepUintArray","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"retrieveDeepArray","outputs":[{"name":"","type":"uint64[3][4][5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"deepUint64Array","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"}]`},
  1076  		`
  1077  			"math/big"
  1078  
  1079  			"github.com/klaytn/klaytn/accounts/abi/bind"
  1080  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1081  			"github.com/klaytn/klaytn/blockchain"
  1082  			"github.com/klaytn/klaytn/crypto"
  1083  		`,
  1084  		`
  1085  			// Generate a new random account and a funded simulator
  1086  			key, _ := crypto.GenerateKey()
  1087  			auth := bind.NewKeyedTransactor(key)
  1088  
  1089  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
  1090  			defer sim.Close()
  1091  
  1092  			//deploy the test contract
  1093  			_, _, testContract, err := DeployDeeplyNestedArray(auth, sim)
  1094  			if err != nil {
  1095  				t.Fatalf("Failed to deploy test contract: %v", err)
  1096  			}
  1097  
  1098  			// Finish deploy.
  1099  			sim.Commit()
  1100  
  1101  			//Create coordinate-filled array, for testing purposes.
  1102  			testArr := [5][4][3]uint64{}
  1103  			for i := 0; i < 5; i++ {
  1104  				testArr[i] = [4][3]uint64{}
  1105  				for j := 0; j < 4; j++ {
  1106  					testArr[i][j] = [3]uint64{}
  1107  					for k := 0; k < 3; k++ {
  1108  						//pack the coordinates, each array value will be unique, and can be validated easily.
  1109  						testArr[i][j][k] = uint64(i) << 16 | uint64(j) << 8 | uint64(k)
  1110  					}
  1111  				}
  1112  			}
  1113  
  1114  			if _, err := testContract.StoreDeepUintArray(&bind.TransactOpts{
  1115  				From: auth.From,
  1116  				Signer: auth.Signer,
  1117  			}, testArr); err != nil {
  1118  				t.Fatalf("Failed to store nested array in test contract: %v", err)
  1119  			}
  1120  
  1121  			sim.Commit()
  1122  
  1123  			retrievedArr, err := testContract.RetrieveDeepArray(&bind.CallOpts{
  1124  				From: auth.From,
  1125  				Pending: false,
  1126  			})
  1127  			if err != nil {
  1128  				t.Fatalf("Failed to retrieve nested array from test contract: %v", err)
  1129  			}
  1130  
  1131  			//quick check to see if contents were copied
  1132  			// (See accounts/abi/unpack_test.go for more extensive testing)
  1133  			if retrievedArr[4][3][2] != testArr[4][3][2] {
  1134  				t.Fatalf("Retrieved value does not match expected value! got: %d, expected: %d. %v", retrievedArr[4][3][2], testArr[4][3][2], err)
  1135  			}
  1136  		`,
  1137  		nil,
  1138  		nil,
  1139  		nil,
  1140  		nil,
  1141  	},
  1142  	{
  1143  		`CallbackParam`,
  1144  		`
  1145  			contract FunctionPointerTest {
  1146  				function test(function(uint256) external callback) external {
  1147  					callback(1);
  1148  				}
  1149  			}
  1150  		`,
  1151  		[]string{`608060405234801561001057600080fd5b5061015e806100206000396000f3fe60806040526004361061003b576000357c010000000000000000000000000000000000000000000000000000000090048063d7a5aba214610040575b600080fd5b34801561004c57600080fd5b506100be6004803603602081101561006357600080fd5b810190808035806c0100000000000000000000000090049068010000000000000000900463ffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff169091602001919093929190939291905050506100c0565b005b818160016040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561011657600080fd5b505af115801561012a573d6000803e3d6000fd5b50505050505056fea165627a7a7230582062f87455ff84be90896dbb0c4e4ddb505c600d23089f8e80a512548440d7e2580029`},
  1152  		[]string{`[
  1153  			{
  1154  				"constant": false,
  1155  				"inputs": [
  1156  					{
  1157  						"name": "callback",
  1158  						"type": "function"
  1159  					}
  1160  				],
  1161  				"name": "test",
  1162  				"outputs": [],
  1163  				"payable": false,
  1164  				"stateMutability": "nonpayable",
  1165  				"type": "function"
  1166  			}
  1167  		]`},
  1168  		`
  1169  			"strings"
  1170  		`,
  1171  		`
  1172  			if strings.Compare("test(function)", CallbackParamFuncSigs["d7a5aba2"]) != 0 {
  1173  				t.Fatalf("")
  1174  			}
  1175  		`,
  1176  		[]map[string]string{
  1177  			{
  1178  				"test(function)": "d7a5aba2",
  1179  			},
  1180  		},
  1181  		nil,
  1182  		nil,
  1183  		nil,
  1184  	},
  1185  	{
  1186  		`Tuple`,
  1187  		`
  1188  		pragma solidity >=0.4.19 <0.6.0;
  1189  		pragma experimental ABIEncoderV2;
  1190  
  1191  		contract Tuple {
  1192  			struct S { uint a; uint[] b; T[] c; }
  1193  			struct T { uint x; uint y; }
  1194  			struct P { uint8 x; uint8 y; }
  1195  			struct Q { uint16 x; uint16 y; }
  1196  			event TupleEvent(S a, T[2][] b, T[][2] c, S[] d, uint[] e);
  1197  			event TupleEvent2(P[]);
  1198  
  1199  			function func1(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public pure returns (S memory, T[2][] memory, T[][2] memory, S[] memory, uint[] memory) {
  1200  				return (a, b, c, d, e);
  1201  			}
  1202  			function func2(S memory a, T[2][] memory b, T[][2] memory c, S[] memory d, uint[] memory e) public {
  1203  				emit TupleEvent(a, b, c, d, e);
  1204  			}
  1205  			function func3(Q[] memory) public pure {} // call function, nothing to return
  1206  		}
  1207  		`,
  1208  		[]string{`60806040523480156100115760006000fd5b50610017565b6110b2806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100465760003560e01c8063443c79b41461004c578063d0062cdd14610080578063e4d9a43b1461009c57610046565b60006000fd5b610066600480360361006191908101906107b8565b6100b8565b604051610077959493929190610ccb565b60405180910390f35b61009a600480360361009591908101906107b8565b6100ef565b005b6100b660048036036100b19190810190610775565b610136565b005b6100c061013a565b60606100ca61015e565b606060608989898989945094509450945094506100e2565b9550955095509550959050565b7f18d6e66efa53739ca6d13626f35ebc700b31cced3eddb50c70bbe9c082c6cd008585858585604051610126959493929190610ccb565b60405180910390a15b5050505050565b5b50565b60405180606001604052806000815260200160608152602001606081526020015090565b60405180604001604052806002905b606081526020019060019003908161016d57905050905661106e565b600082601f830112151561019d5760006000fd5b81356101b06101ab82610d6f565b610d41565b915081818352602084019350602081019050838560808402820111156101d65760006000fd5b60005b8381101561020757816101ec888261037a565b8452602084019350608083019250505b6001810190506101d9565b5050505092915050565b600082601f83011215156102255760006000fd5b600261023861023382610d98565b610d41565b9150818360005b83811015610270578135860161025588826103f3565b8452602084019350602083019250505b60018101905061023f565b5050505092915050565b600082601f830112151561028e5760006000fd5b81356102a161029c82610dbb565b610d41565b915081818352602084019350602081019050838560408402820111156102c75760006000fd5b60005b838110156102f857816102dd888261058b565b8452602084019350604083019250505b6001810190506102ca565b5050505092915050565b600082601f83011215156103165760006000fd5b813561032961032482610de4565b610d41565b9150818183526020840193506020810190508360005b83811015610370578135860161035588826105d8565b8452602084019350602083019250505b60018101905061033f565b5050505092915050565b600082601f830112151561038e5760006000fd5b60026103a161039c82610e0d565b610d41565b915081838560408402820111156103b85760006000fd5b60005b838110156103e957816103ce88826106fe565b8452602084019350604083019250505b6001810190506103bb565b5050505092915050565b600082601f83011215156104075760006000fd5b813561041a61041582610e30565b610d41565b915081818352602084019350602081019050838560408402820111156104405760006000fd5b60005b83811015610471578161045688826106fe565b8452602084019350604083019250505b600181019050610443565b5050505092915050565b600082601f830112151561048f5760006000fd5b81356104a261049d82610e59565b610d41565b915081818352602084019350602081019050838560208402820111156104c85760006000fd5b60005b838110156104f957816104de8882610760565b8452602084019350602083019250505b6001810190506104cb565b5050505092915050565b600082601f83011215156105175760006000fd5b813561052a61052582610e82565b610d41565b915081818352602084019350602081019050838560208402820111156105505760006000fd5b60005b8381101561058157816105668882610760565b8452602084019350602083019250505b600181019050610553565b5050505092915050565b60006040828403121561059e5760006000fd5b6105a86040610d41565b905060006105b88482850161074b565b60008301525060206105cc8482850161074b565b60208301525092915050565b6000606082840312156105eb5760006000fd5b6105f56060610d41565b9050600061060584828501610760565b600083015250602082013567ffffffffffffffff8111156106265760006000fd5b6106328482850161047b565b602083015250604082013567ffffffffffffffff8111156106535760006000fd5b61065f848285016103f3565b60408301525092915050565b60006060828403121561067e5760006000fd5b6106886060610d41565b9050600061069884828501610760565b600083015250602082013567ffffffffffffffff8111156106b95760006000fd5b6106c58482850161047b565b602083015250604082013567ffffffffffffffff8111156106e65760006000fd5b6106f2848285016103f3565b60408301525092915050565b6000604082840312156107115760006000fd5b61071b6040610d41565b9050600061072b84828501610760565b600083015250602061073f84828501610760565b60208301525092915050565b60008135905061075a8161103a565b92915050565b60008135905061076f81611054565b92915050565b6000602082840312156107885760006000fd5b600082013567ffffffffffffffff8111156107a35760006000fd5b6107af8482850161027a565b91505092915050565b6000600060006000600060a086880312156107d35760006000fd5b600086013567ffffffffffffffff8111156107ee5760006000fd5b6107fa8882890161066b565b955050602086013567ffffffffffffffff8111156108185760006000fd5b61082488828901610189565b945050604086013567ffffffffffffffff8111156108425760006000fd5b61084e88828901610211565b935050606086013567ffffffffffffffff81111561086c5760006000fd5b61087888828901610302565b925050608086013567ffffffffffffffff8111156108965760006000fd5b6108a288828901610503565b9150509295509295909350565b60006108bb8383610a6a565b60808301905092915050565b60006108d38383610ac2565b905092915050565b60006108e78383610c36565b905092915050565b60006108fb8383610c8d565b60408301905092915050565b60006109138383610cbc565b60208301905092915050565b600061092a82610f0f565b6109348185610fb7565b935061093f83610eab565b8060005b8381101561097157815161095788826108af565b975061096283610f5c565b9250505b600181019050610943565b5085935050505092915050565b600061098982610f1a565b6109938185610fc8565b9350836020820285016109a585610ebb565b8060005b858110156109e257848403895281516109c285826108c7565b94506109cd83610f69565b925060208a019950505b6001810190506109a9565b50829750879550505050505092915050565b60006109ff82610f25565b610a098185610fd3565b935083602082028501610a1b85610ec5565b8060005b85811015610a585784840389528151610a3885826108db565b9450610a4383610f76565b925060208a019950505b600181019050610a1f565b50829750879550505050505092915050565b610a7381610f30565b610a7d8184610fe4565b9250610a8882610ed5565b8060005b83811015610aba578151610aa087826108ef565b9650610aab83610f83565b9250505b600181019050610a8c565b505050505050565b6000610acd82610f3b565b610ad78185610fef565b9350610ae283610edf565b8060005b83811015610b14578151610afa88826108ef565b9750610b0583610f90565b9250505b600181019050610ae6565b5085935050505092915050565b6000610b2c82610f51565b610b368185611011565b9350610b4183610eff565b8060005b83811015610b73578151610b598882610907565b9750610b6483610faa565b9250505b600181019050610b45565b5085935050505092915050565b6000610b8b82610f46565b610b958185611000565b9350610ba083610eef565b8060005b83811015610bd2578151610bb88882610907565b9750610bc383610f9d565b9250505b600181019050610ba4565b5085935050505092915050565b6000606083016000830151610bf76000860182610cbc565b5060208301518482036020860152610c0f8282610b80565b91505060408301518482036040860152610c298282610ac2565b9150508091505092915050565b6000606083016000830151610c4e6000860182610cbc565b5060208301518482036020860152610c668282610b80565b91505060408301518482036040860152610c808282610ac2565b9150508091505092915050565b604082016000820151610ca36000850182610cbc565b506020820151610cb66020850182610cbc565b50505050565b610cc581611030565b82525050565b600060a0820190508181036000830152610ce58188610bdf565b90508181036020830152610cf9818761091f565b90508181036040830152610d0d818661097e565b90508181036060830152610d2181856109f4565b90508181036080830152610d358184610b21565b90509695505050505050565b6000604051905081810181811067ffffffffffffffff82111715610d655760006000fd5b8060405250919050565b600067ffffffffffffffff821115610d875760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610db05760006000fd5b602082029050919050565b600067ffffffffffffffff821115610dd35760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610dfc5760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e255760006000fd5b602082029050919050565b600067ffffffffffffffff821115610e485760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e715760006000fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610e9a5760006000fd5b602082029050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061ffff82169050919050565b6000819050919050565b61104381611022565b811415156110515760006000fd5b50565b61105d81611030565b8114151561106b5760006000fd5b50565bfea365627a7a72315820d78c6ba7ee332581e6c4d9daa5fc07941841230f7ce49edf6e05b1b63853e8746c6578706572696d656e74616cf564736f6c634300050c0040`},
  1209  		[]string{`
  1210  [{"anonymous":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"indexed":false,"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"indexed":false,"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"indexed":false,"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"TupleEvent","type":"event"},{"anonymous":false,"inputs":[{"components":[{"internalType":"uint8","name":"x","type":"uint8"},{"internalType":"uint8","name":"y","type":"uint8"}],"indexed":false,"internalType":"struct Tuple.P[]","name":"","type":"tuple[]"}],"name":"TupleEvent2","type":"event"},{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func1","outputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"","type":"tuple[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S","name":"a","type":"tuple"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[2][]","name":"b","type":"tuple[2][]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[][2]","name":"c","type":"tuple[][2]"},{"components":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256[]","name":"b","type":"uint256[]"},{"components":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"internalType":"struct Tuple.T[]","name":"c","type":"tuple[]"}],"internalType":"struct Tuple.S[]","name":"d","type":"tuple[]"},{"internalType":"uint256[]","name":"e","type":"uint256[]"}],"name":"func2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"components":[{"internalType":"uint16","name":"x","type":"uint16"},{"internalType":"uint16","name":"y","type":"uint16"}],"internalType":"struct Tuple.Q[]","name":"","type":"tuple[]"}],"name":"func3","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]
  1211  		`},
  1212  		`
  1213  			"math/big"
  1214  			"reflect"
  1215  
  1216  			"github.com/klaytn/klaytn/accounts/abi/bind"
  1217  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1218  			"github.com/klaytn/klaytn/blockchain"
  1219  			"github.com/klaytn/klaytn/crypto"
  1220  		`,
  1221  
  1222  		`
  1223  			key, _ := crypto.GenerateKey()
  1224  			auth := bind.NewKeyedTransactor(key)
  1225  
  1226  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
  1227  			defer sim.Close()
  1228  
  1229  			_, _, contract, err := DeployTuple(auth, sim)
  1230  			if err != nil {
  1231  				t.Fatalf("deploy contract failed %v", err)
  1232  			}
  1233  			sim.Commit()
  1234  
  1235  			check := func(a, b interface{}, errMsg string) {
  1236  				if !reflect.DeepEqual(a, b) {
  1237  					t.Fatal(errMsg)
  1238  				}
  1239  			}
  1240  
  1241  			a := TupleS{
  1242  				A: big.NewInt(1),
  1243  				B: []*big.Int{big.NewInt(2), big.NewInt(3)},
  1244  				C: []TupleT{
  1245  					{
  1246  						X: big.NewInt(4),
  1247  						Y: big.NewInt(5),
  1248  					},
  1249  					{
  1250  						X: big.NewInt(6),
  1251  						Y: big.NewInt(7),
  1252  					},
  1253  				},
  1254  			}
  1255  
  1256  			b := [][2]TupleT{
  1257  				{
  1258  					{
  1259  						X: big.NewInt(8),
  1260  						Y: big.NewInt(9),
  1261  					},
  1262  					{
  1263  						X: big.NewInt(10),
  1264  						Y: big.NewInt(11),
  1265  					},
  1266  				},
  1267  			}
  1268  
  1269  			c := [2][]TupleT{
  1270  				{
  1271  					{
  1272  						X: big.NewInt(12),
  1273  						Y: big.NewInt(13),
  1274  					},
  1275  					{
  1276  						X: big.NewInt(14),
  1277  						Y: big.NewInt(15),
  1278  					},
  1279  				},
  1280  				{
  1281  					{
  1282  						X: big.NewInt(16),
  1283  						Y: big.NewInt(17),
  1284  					},
  1285  				},
  1286  			}
  1287  
  1288  			d := []TupleS{a}
  1289  
  1290  			e := []*big.Int{big.NewInt(18), big.NewInt(19)}
  1291  			ret1, ret2, ret3, ret4, ret5, err := contract.Func1(nil, a, b, c, d, e)
  1292  			if err != nil {
  1293  				t.Fatalf("invoke contract failed, err %v", err)
  1294  			}
  1295  			check(ret1, a, "ret1 mismatch")
  1296  			check(ret2, b, "ret2 mismatch")
  1297  			check(ret3, c, "ret3 mismatch")
  1298  			check(ret4, d, "ret4 mismatch")
  1299  			check(ret5, e, "ret5 mismatch")
  1300  
  1301  			_, err = contract.Func2(auth, a, b, c, d, e)
  1302  			if err != nil {
  1303  				t.Fatalf("invoke contract failed, err %v", err)
  1304  			}
  1305  			sim.Commit()
  1306  
  1307  			iter, err := contract.FilterTupleEvent(nil)
  1308  			if err != nil {
  1309  				t.Fatalf("failed to create event filter, err %v", err)
  1310  			}
  1311  			defer iter.Close()
  1312  
  1313  			iter.Next()
  1314  			check(iter.Event.A, a, "field1 mismatch")
  1315  			check(iter.Event.B, b, "field2 mismatch")
  1316  			check(iter.Event.C, c, "field3 mismatch")
  1317  			check(iter.Event.D, d, "field4 mismatch")
  1318  			check(iter.Event.E, e, "field5 mismatch")
  1319  
  1320  			err = contract.Func3(nil, nil)
  1321  			if err != nil {
  1322  				t.Fatalf("failed to call function which has no return, err %v", err)
  1323  			}
  1324  		`,
  1325  		nil,
  1326  		nil,
  1327  		nil,
  1328  		nil,
  1329  	},
  1330  	{
  1331  		`UseLibrary`,
  1332  		`
  1333  		library Math {
  1334      		function add(uint a, uint b) public view returns(uint) {
  1335          		return a + b;
  1336      		}
  1337  		}
  1338  
  1339  		contract UseLibrary {
  1340  			function add (uint c, uint d) public view returns(uint) {
  1341          		return Math.add(c,d);
  1342      		}
  1343  		}
  1344  		`,
  1345  		[]string{
  1346  			// Bytecode for the UseLibrary contract
  1347  			`608060405234801561001057600080fd5b5061011d806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063771602f714602d575b600080fd5b604d60048036036040811015604157600080fd5b5080359060200135605f565b60408051918252519081900360200190f35b600073__$b98c933f0a6ececcd167bd4f9d3299b1a0$__63771602f784846040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801560b757600080fd5b505af415801560ca573d6000803e3d6000fd5b505050506040513d602081101560df57600080fd5b5051939250505056fea265627a7a72305820eb5c38f42445604cfa43d85e3aa5ecc48b0a646456c902dd48420ae7241d06f664736f6c63430005090032`,
  1348  			// Bytecode for the Math contract
  1349  			`60a3610024600b82828239805160001a607314601757fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361060335760003560e01c8063771602f7146038575b600080fd5b605860048036036040811015604c57600080fd5b5080359060200135606a565b60408051918252519081900360200190f35b019056fea265627a7a723058206fc6c05f3078327f9c763edffdb5ab5f8bd212e293a1306c7d0ad05af3ad35f464736f6c63430005090032`,
  1350  		},
  1351  		[]string{
  1352  			`[{"constant":true,"inputs":[{"name":"c","type":"uint256"},{"name":"d","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`,
  1353  			`[{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`,
  1354  		},
  1355  		`
  1356  			"math/big"
  1357  
  1358  			"github.com/klaytn/klaytn/accounts/abi/bind"
  1359  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1360  			"github.com/klaytn/klaytn/blockchain"
  1361  			"github.com/klaytn/klaytn/crypto"
  1362  		`,
  1363  		`
  1364  			// Generate a new random account and a funded simulator
  1365  			key, _ := crypto.GenerateKey()
  1366  			auth := bind.NewKeyedTransactor(key)
  1367  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
  1368  			defer sim.Close()
  1369  
  1370  			//deploy the test contract
  1371  			_, _, testContract, err := DeployUseLibrary(auth, sim)
  1372  			if err != nil {
  1373  				t.Fatalf("Failed to deploy test contract: %v", err)
  1374  			}
  1375  
  1376  			// Finish deploy.
  1377  			sim.Commit()
  1378  
  1379  			// Check that the library contract has been deployed
  1380  			// by calling the contract's add function.
  1381  			res, err := testContract.Add(&bind.CallOpts{
  1382  				From: auth.From,
  1383  				Pending: false,
  1384  			}, big.NewInt(1), big.NewInt(2))
  1385  			if err != nil {
  1386  				t.Fatalf("Failed to call linked contract: %v", err)
  1387  			}
  1388  			if res.Cmp(big.NewInt(3)) != 0 {
  1389  				t.Fatalf("Add did not return the correct result: %d != %d", res, 3)
  1390  			}
  1391  		`,
  1392  		nil,
  1393  		map[string]string{
  1394  			"b98c933f0a6ececcd167bd4f9d3299b1a0": "Math",
  1395  		},
  1396  		nil,
  1397  		[]string{"UseLibrary", "Math"},
  1398  	},
  1399  	{
  1400  		"Overload",
  1401  		`
  1402  		pragma solidity ^0.5.10;
  1403  
  1404  		contract overload {
  1405  		  mapping(address => uint256) balances;
  1406  
  1407  		  event bar(uint256 i);
  1408  		  event bar(uint256 i, uint256 j);
  1409  
  1410  		  function foo(uint256 i) public {
  1411  			  emit bar(i);
  1412  		  }
  1413  		  function foo(uint256 i, uint256 j) public {
  1414  			  emit bar(i, j);
  1415  		  }
  1416  		}
  1417  		`,
  1418  		[]string{`608060405234801561001057600080fd5b50610153806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806304bc52f81461003b5780632fbebd3814610073575b600080fd5b6100716004803603604081101561005157600080fd5b8101908080359060200190929190803590602001909291905050506100a1565b005b61009f6004803603602081101561008957600080fd5b81019080803590602001909291905050506100e4565b005b7fae42e9514233792a47a1e4554624e83fe852228e1503f63cd383e8a431f4f46d8282604051808381526020018281526020019250505060405180910390a15050565b7f0423a1321222a0a8716c22b92fac42d85a45a612b696a461784d9fa537c81e5c816040518082815260200191505060405180910390a15056fea265627a7a72305820e22b049858b33291cbe67eeaece0c5f64333e439d27032ea8337d08b1de18fe864736f6c634300050a0032`},
  1419  		[]string{`[{"constant":false,"inputs":[{"name":"i","type":"uint256"},{"name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"i","type":"uint256"},{"indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}]`},
  1420  		`
  1421  		"math/big"
  1422  		"time"
  1423  
  1424  		"github.com/klaytn/klaytn/accounts/abi/bind"
  1425  		"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1426  		"github.com/klaytn/klaytn/blockchain"
  1427  		"github.com/klaytn/klaytn/crypto"
  1428  		`,
  1429  		`
  1430  		// Initialize test accounts
  1431  		key, _ := crypto.GenerateKey()
  1432  		auth := bind.NewKeyedTransactor(key)
  1433  		sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
  1434  		defer sim.Close()
  1435  
  1436  		// deploy the test contract
  1437  		_, _, contract, err := DeployOverload(auth, sim)
  1438  		if err != nil {
  1439  			t.Fatalf("Failed to deploy contract: %v", err)
  1440  		}
  1441  		// Finish deploy.
  1442  		sim.Commit()
  1443  
  1444  		resCh, stopCh := make(chan uint64), make(chan struct{})
  1445  
  1446  		go func() {
  1447  			barSink := make(chan *OverloadBar)
  1448  			sub, _ := contract.WatchBar(nil, barSink)
  1449  			defer sub.Unsubscribe()
  1450  
  1451  			bar0Sink := make(chan *OverloadBar0)
  1452  			sub0, _ := contract.WatchBar0(nil, bar0Sink)
  1453  			defer sub0.Unsubscribe()
  1454  
  1455  			for {
  1456  				select {
  1457  				case ev := <-barSink:
  1458  					resCh <- ev.I.Uint64()
  1459  				case ev := <-bar0Sink:
  1460  					resCh <- ev.I.Uint64() + ev.J.Uint64()
  1461  				case <-stopCh:
  1462  					return
  1463  				}
  1464  			}
  1465  		}()
  1466  		contract.Foo(auth, big.NewInt(1), big.NewInt(2))
  1467  		sim.Commit()
  1468  		select {
  1469  		case n := <-resCh:
  1470  			if n != 3 {
  1471  				t.Fatalf("Invalid bar0 event")
  1472  			}
  1473  		case <-time.NewTimer(3 * time.Second).C:
  1474  			t.Fatalf("Wait bar0 event timeout")
  1475  		}
  1476  
  1477  		contract.Foo0(auth, big.NewInt(1))
  1478  		sim.Commit()
  1479  		select {
  1480  		case n := <-resCh:
  1481  			if n != 1 {
  1482  				t.Fatalf("Invalid bar event")
  1483  			}
  1484  		case <-time.NewTimer(3 * time.Second).C:
  1485  			t.Fatalf("Wait bar event timeout")
  1486  		}
  1487  		close(stopCh)
  1488  		`,
  1489  		nil,
  1490  		nil,
  1491  		nil,
  1492  		nil,
  1493  	},
  1494  	{
  1495  		"IdentifierCollision",
  1496  		`
  1497  		pragma solidity >=0.4.19 <0.6.0;
  1498  
  1499  		contract IdentifierCollision {
  1500  			uint public _myVar;
  1501  
  1502  			function MyVar() public view returns (uint) {
  1503  				return _myVar;
  1504  			}
  1505  		}
  1506  		`,
  1507  		[]string{"60806040523480156100115760006000fd5b50610017565b60c3806100256000396000f3fe608060405234801560105760006000fd5b506004361060365760003560e01c806301ad4d8714603c5780634ef1f0ad146058576036565b60006000fd5b60426074565b6040518082815260200191505060405180910390f35b605e607d565b6040518082815260200191505060405180910390f35b60006000505481565b60006000600050549050608b565b9056fea265627a7a7231582067c8d84688b01c4754ba40a2a871cede94ea1f28b5981593ab2a45b46ac43af664736f6c634300050c0032"},
  1508  		[]string{`[{"constant":true,"inputs":[],"name":"MyVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_myVar","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]`},
  1509  		`
  1510  		"math/big"
  1511  
  1512  		"github.com/klaytn/klaytn/accounts/abi/bind"
  1513  		"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1514  		"github.com/klaytn/klaytn/crypto"
  1515  		"github.com/klaytn/klaytn/blockchain"
  1516  		`,
  1517  		`
  1518  		// Initialize test accounts
  1519  		key, _ := crypto.GenerateKey()
  1520  		addr := crypto.PubkeyToAddress(key.PublicKey)
  1521  
  1522  		// Deploy registrar contract
  1523  		sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}})
  1524  		defer sim.Close()
  1525  
  1526  		transactOpts := bind.NewKeyedTransactor(key)
  1527  		_, _, _, err := DeployIdentifierCollision(transactOpts, sim)
  1528  		if err != nil {
  1529  			t.Fatalf("failed to deploy contract: %v", err)
  1530  		}
  1531  		`,
  1532  		nil,
  1533  		nil,
  1534  		map[string]string{"_myVar": "pubVar"}, // alias MyVar to PubVar
  1535  		nil,
  1536  	},
  1537  	{
  1538  		"MultiContracts",
  1539  		`
  1540  		pragma solidity ^0.5.11;
  1541  		pragma experimental ABIEncoderV2;
  1542  
  1543  		library ExternalLib {
  1544  			struct SharedStruct{
  1545  				uint256 f1;
  1546  				bytes32 f2;
  1547  			}
  1548  		}
  1549  
  1550  		contract ContractOne {
  1551  			function foo(ExternalLib.SharedStruct memory s) pure public {
  1552  				// Do stuff
  1553  			}
  1554  		}
  1555  
  1556  		contract ContractTwo {
  1557  			function bar(ExternalLib.SharedStruct memory s) pure public {
  1558  				// Do stuff
  1559  			}
  1560  		}
  1561          `,
  1562  		[]string{
  1563  			`60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c80639d8a8ba81461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a72315820749274eb7f6c01010d5322af4e1668b0a154409eb7968bd6cae5524c7ed669bb6c6578706572696d656e74616cf564736f6c634300050c0040`,
  1564  			`60806040523480156100115760006000fd5b50610017565b6101b5806100266000396000f3fe60806040523480156100115760006000fd5b50600436106100305760003560e01c8063db8ba08c1461003657610030565b60006000fd5b610050600480360361004b91908101906100d1565b610052565b005b5b5056610171565b6000813590506100698161013d565b92915050565b6000604082840312156100825760006000fd5b61008c60406100fb565b9050600061009c848285016100bc565b60008301525060206100b08482850161005a565b60208301525092915050565b6000813590506100cb81610157565b92915050565b6000604082840312156100e45760006000fd5b60006100f28482850161006f565b91505092915050565b6000604051905081810181811067ffffffffffffffff8211171561011f5760006000fd5b8060405250919050565b6000819050919050565b6000819050919050565b61014681610129565b811415156101545760006000fd5b50565b61016081610133565b8114151561016e5760006000fd5b50565bfea365627a7a723158209bc28ee7ea97c131a13330d77ec73b4493b5c59c648352da81dd288b021192596c6578706572696d656e74616cf564736f6c634300050c0040`,
  1565  			`606c6026600b82828239805160001a6073141515601857fe5b30600052607381538281f350fe73000000000000000000000000000000000000000030146080604052600436106023575b60006000fdfea365627a7a72315820518f0110144f5b3de95697d05e456a064656890d08e6f9cff47f3be710cc46a36c6578706572696d656e74616cf564736f6c634300050c0040`,
  1566  		},
  1567  		[]string{
  1568  			`[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`,
  1569  			`[{"constant":true,"inputs":[{"components":[{"internalType":"uint256","name":"f1","type":"uint256"},{"internalType":"bytes32","name":"f2","type":"bytes32"}],"internalType":"struct ExternalLib.SharedStruct","name":"s","type":"tuple"}],"name":"bar","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}]`,
  1570  			`[]`,
  1571  		},
  1572  		`
  1573  		"math/big"
  1574  
  1575  		"github.com/klaytn/klaytn/accounts/abi/bind"
  1576  		"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1577  		"github.com/klaytn/klaytn/crypto"
  1578  		"github.com/klaytn/klaytn/blockchain"
  1579          `,
  1580  		`
  1581  		key, _ := crypto.GenerateKey()
  1582  		addr := crypto.PubkeyToAddress(key.PublicKey)
  1583  
  1584  		// Deploy registrar contract
  1585  		sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}})
  1586  		defer sim.Close()
  1587  
  1588  		transactOpts := bind.NewKeyedTransactor(key)
  1589  		_, _, c1, err := DeployContractOne(transactOpts, sim)
  1590  		if err != nil {
  1591  			t.Fatal("Failed to deploy contract")
  1592  		}
  1593  		sim.Commit()
  1594  		err = c1.Foo(nil, ExternalLibSharedStruct{
  1595  			F1: big.NewInt(100),
  1596  			F2: [32]byte{0x01, 0x02, 0x03},
  1597  		})
  1598  		if err != nil {
  1599  			t.Fatal("Failed to invoke function")
  1600  		}
  1601  		_, _, c2, err := DeployContractTwo(transactOpts, sim)
  1602  		if err != nil {
  1603  			t.Fatal("Failed to deploy contract")
  1604  		}
  1605  		sim.Commit()
  1606  		err = c2.Bar(nil, ExternalLibSharedStruct{
  1607  			F1: big.NewInt(100),
  1608  			F2: [32]byte{0x01, 0x02, 0x03},
  1609  		})
  1610  		if err != nil {
  1611  			t.Fatal("Failed to invoke function")
  1612  		}
  1613          `,
  1614  		nil,
  1615  		nil,
  1616  		nil,
  1617  		[]string{"ContractOne", "ContractTwo", "ExternalLib"},
  1618  	},
  1619  	// Test the existence of the free retrieval calls
  1620  	{
  1621  		`PureAndView`,
  1622  		`pragma solidity >=0.6.0;
  1623  		contract PureAndView {
  1624  			function PureFunc() public pure returns (uint) {
  1625  				return 42;
  1626  			}
  1627  			function ViewFunc() public view returns (uint) {
  1628  				return block.number;
  1629  			}
  1630  		}
  1631  		`,
  1632  		[]string{`608060405234801561001057600080fd5b5060b68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806376b5686a146037578063bb38c66c146053575b600080fd5b603d606f565b6040518082815260200191505060405180910390f35b60596077565b6040518082815260200191505060405180910390f35b600043905090565b6000602a90509056fea2646970667358221220d158c2ab7fdfce366a7998ec79ab84edd43b9815630bbaede2c760ea77f29f7f64736f6c63430006000033`},
  1633  		[]string{`[{"inputs": [],"name": "PureFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "pure","type": "function"},{"inputs": [],"name": "ViewFunc","outputs": [{"internalType": "uint256","name": "","type": "uint256"}],"stateMutability": "view","type": "function"}]`},
  1634  		`
  1635  			"math/big"
  1636  
  1637  			"github.com/klaytn/klaytn/accounts/abi/bind"
  1638  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1639  			"github.com/klaytn/klaytn/blockchain"
  1640  			"github.com/klaytn/klaytn/crypto"
  1641  		`,
  1642  		`
  1643  			// Generate a new random account and a funded simulator
  1644  			key, _ := crypto.GenerateKey()
  1645  			auth := bind.NewKeyedTransactor(key)
  1646  
  1647  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{auth.From: {Balance: big.NewInt(10000000000)}})
  1648  			defer sim.Close()
  1649  
  1650  			// Deploy a tester contract and execute a structured call on it
  1651  			_, _, pav, err := DeployPureAndView(auth, sim)
  1652  			if err != nil {
  1653  				t.Fatalf("Failed to deploy PureAndView contract: %v", err)
  1654  			}
  1655  			sim.Commit()
  1656  
  1657  			// This test the existence of the free retreiver call for view and pure functions
  1658  			if num, err := pav.PureFunc(nil); err != nil {
  1659  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
  1660  			} else if num.Cmp(big.NewInt(42)) != 0 {
  1661  				t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 42)
  1662  			}
  1663  			if num, err := pav.ViewFunc(nil); err != nil {
  1664  				t.Fatalf("Failed to call anonymous field retriever: %v", err)
  1665  			} else if num.Cmp(big.NewInt(1)) != 0 {
  1666  				t.Fatalf("Retrieved value mismatch: have %v, want %v", num, 1)
  1667  			}
  1668  		`,
  1669  		nil,
  1670  		nil,
  1671  		nil,
  1672  		nil,
  1673  	},
  1674  	// Test fallback separation introduced in v0.6.0
  1675  	{
  1676  		`NewFallbacks`,
  1677  		`
  1678  		pragma solidity >=0.6.0 <0.7.0;
  1679  	
  1680  		contract NewFallbacks {
  1681  			event Fallback(bytes data);
  1682  			fallback() external {
  1683  				emit Fallback(msg.data);
  1684  			}
  1685  	
  1686  			event Received(address addr, uint value);
  1687  			receive() external payable {
  1688  				emit Received(msg.sender, msg.value);
  1689  			}
  1690  		}
  1691  	   `,
  1692  		[]string{"6080604052348015600f57600080fd5b506101078061001f6000396000f3fe608060405236605f577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f885258743334604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1005b348015606a57600080fd5b507f9043988963722edecc2099c75b0af0ff76af14ffca42ed6bce059a20a2a9f98660003660405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a100fea26469706673582212201f994dcfbc53bf610b19176f9a361eafa77b447fd9c796fa2c615dfd0aaf3b8b64736f6c634300060c0033"},
  1693  		[]string{`[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Fallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]`},
  1694  		`
  1695  			"bytes"
  1696  			"math/big"
  1697  	
  1698  			"github.com/klaytn/klaytn/accounts/abi/bind"
  1699  			"github.com/klaytn/klaytn/accounts/abi/bind/backends"
  1700  			"github.com/klaytn/klaytn/blockchain"
  1701  			"github.com/klaytn/klaytn/crypto"
  1702  	   `,
  1703  		`
  1704  			key, _ := crypto.GenerateKey()
  1705  			addr := crypto.PubkeyToAddress(key.PublicKey)
  1706  	
  1707  			sim := backends.NewSimulatedBackend(blockchain.GenesisAlloc{addr: {Balance: big.NewInt(10000000000)}})
  1708  			defer sim.Close()
  1709  	
  1710  			opts := bind.NewKeyedTransactor(key)
  1711  			_, _, c, err := DeployNewFallbacks(opts, sim)
  1712  			if err != nil {
  1713  				t.Fatalf("Failed to deploy contract: %v", err)
  1714  			}
  1715  			sim.Commit()
  1716  	
  1717  			// Test receive function
  1718  			opts.Value = big.NewInt(100)
  1719  			c.Receive(opts)
  1720  			sim.Commit()
  1721  	
  1722  			var gotEvent bool
  1723  			iter, _ := c.FilterReceived(nil)
  1724  			defer iter.Close()
  1725  			for iter.Next() {
  1726  				if iter.Event.Addr != addr {
  1727  					t.Fatal("Msg.sender mismatch")
  1728  				}
  1729  				if iter.Event.Value.Cmp(opts.Value) != 0 {
  1730  					t.Fatal("Msg.value mismatch")
  1731  				}
  1732  				gotEvent = true
  1733  				break
  1734  			}
  1735  			if !gotEvent {
  1736  				t.Fatal("Expect to receive event emitted by receive")
  1737  			}
  1738  	
  1739  			// Test fallback function
  1740  			gotEvent = false
  1741  			opts.Value = nil
  1742  			calldata := []byte{0x01, 0x02, 0x03}
  1743  			c.Fallback(opts, calldata)
  1744  			sim.Commit()
  1745  	
  1746  			iter2, _ := c.FilterFallback(nil)
  1747  			defer iter2.Close()
  1748  			for iter2.Next() {
  1749  				if !bytes.Equal(iter2.Event.Data, calldata) {
  1750  					t.Fatal("calldata mismatch")
  1751  				}
  1752  				gotEvent = true
  1753  				break
  1754  			}
  1755  			if !gotEvent {
  1756  				t.Fatal("Expect to receive event emitted by fallback")
  1757  			}
  1758  	   `,
  1759  		nil,
  1760  		nil,
  1761  		nil,
  1762  		nil,
  1763  	},
  1764  }
  1765  
  1766  // Tests that packages generated by the binder can be successfully compiled and
  1767  // the requested tester run against it.
  1768  func TestGolangBindings(t *testing.T) {
  1769  	// Skip the test if no Go command can be found
  1770  	gocmd := runtime.GOROOT() + "/bin/go"
  1771  	if !common.FileExist(gocmd) {
  1772  		t.Skip("go sdk not found for testing")
  1773  	}
  1774  	// Create a temporary workspace for the test suite
  1775  	ws, err := os.MkdirTemp("", "binding-test")
  1776  	if err != nil {
  1777  		t.Fatalf("failed to create temporary workspace: %v", err)
  1778  	}
  1779  	defer os.RemoveAll(ws)
  1780  
  1781  	pkg := filepath.Join(ws, "bindtest")
  1782  	if err = os.MkdirAll(pkg, 0o700); err != nil {
  1783  		t.Fatalf("failed to create package: %v", err)
  1784  	}
  1785  	// Generate the test suite for all the contracts
  1786  	for i, tt := range bindTests {
  1787  		t.Run(tt.name, func(t *testing.T) {
  1788  			var types []string
  1789  			if tt.types != nil {
  1790  				types = tt.types
  1791  			} else {
  1792  				types = []string{tt.name}
  1793  			}
  1794  			// Generate the binding and create a Go source file in the workspace
  1795  			bind, err := Bind(types, tt.abi, tt.bytecode, tt.bytecode, tt.fsigs, "bindtest", LangGo, tt.libs, tt.aliases)
  1796  			if err != nil {
  1797  				t.Fatalf("test %d: failed to generate binding: %v", i, err)
  1798  			}
  1799  			if err = os.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+".go"), []byte(bind), 0o600); err != nil {
  1800  				t.Fatalf("test %d: failed to write binding: %v", i, err)
  1801  			}
  1802  			// Generate the test file with the injected test code
  1803  			code := fmt.Sprintf(`
  1804  				package bindtest
  1805  	
  1806  				import (
  1807  					"testing"
  1808  					%s
  1809  				)
  1810  	
  1811  				func Test%s(t *testing.T) {
  1812  					%s
  1813  				}
  1814  			`, tt.imports, tt.name, tt.tester)
  1815  			if err := os.WriteFile(filepath.Join(pkg, strings.ToLower(tt.name)+"_test.go"), []byte(code), 0o600); err != nil {
  1816  				t.Fatalf("test %d: failed to write tests: %v", i, err)
  1817  			}
  1818  		})
  1819  	}
  1820  	// Convert the package to go modules and use the current source for klaytn
  1821  	moder := exec.Command(gocmd, "mod", "init", "bindtest")
  1822  	moder.Dir = pkg
  1823  	if out, err := moder.CombinedOutput(); err != nil {
  1824  		t.Fatalf("failed to convert binding test to modules: %v\n%s", err, out)
  1825  	}
  1826  	pwd, _ := os.Getwd()
  1827  	replacer := exec.Command(gocmd, "mod", "edit", "-x", "-require", "github.com/klaytn/klaytn@v0.0.0-local", "-replace", "github.com/klaytn/klaytn="+filepath.Join(pwd, "..", "..", "..")) // Repo root
  1828  	replacer.Dir = pkg
  1829  	if out, err := replacer.CombinedOutput(); err != nil {
  1830  		t.Fatalf("failed to replace binding test dependency to current source tree: %v\n%s", err, out)
  1831  	}
  1832  	tidier := exec.Command(gocmd, "mod", "tidy")
  1833  	tidier.Dir = pkg
  1834  	if out, err := tidier.CombinedOutput(); err != nil {
  1835  		t.Fatalf("failed to tidy Go module file: %v\n%s", err, out)
  1836  	}
  1837  	// Test the entire package and report any failures
  1838  	cmd := exec.Command(gocmd, "test", "-v", "-count", "1", "-timeout", "1m")
  1839  	cmd.Dir = pkg
  1840  	if out, err := cmd.CombinedOutput(); err != nil {
  1841  		t.Fatalf("failed to run binding test: %v\n%s", err, out)
  1842  	}
  1843  }
  1844  
  1845  // TODO-klaytn: change org.ethereum.geth to org.klaytn when ready
  1846  // Tests that java binding generated by the binder is exactly matched.
  1847  func TestJavaBindings(t *testing.T) {
  1848  	cases := []struct {
  1849  		name     string
  1850  		contract string
  1851  		abi      string
  1852  		bytecode string
  1853  		expected string
  1854  	}{
  1855  		{
  1856  			"test",
  1857  			`
  1858  			pragma experimental ABIEncoderV2;
  1859  			pragma solidity ^0.5.2;
  1860  
  1861  			contract test {
  1862  				function setAddress(address a) public returns(address){}
  1863  				function setAddressList(address[] memory a_l) public returns(address[] memory){}
  1864  				function setAddressArray(address[2] memory a_a) public returns(address[2] memory){}
  1865  
  1866  				function setUint8(uint8 u8) public returns(uint8){}
  1867  				function setUint16(uint16 u16) public returns(uint16){}
  1868  				function setUint32(uint32 u32) public returns(uint32){}
  1869  				function setUint64(uint64 u64) public returns(uint64){}
  1870  				function setUint256(uint256 u256) public returns(uint256){}
  1871  				function setUint256List(uint256[] memory u256_l) public returns(uint256[] memory){}
  1872  				function setUint256Array(uint256[2] memory u256_a) public returns(uint256[2] memory){}
  1873  
  1874  				function setInt8(int8 i8) public returns(int8){}
  1875  				function setInt16(int16 i16) public returns(int16){}
  1876  				function setInt32(int32 i32) public returns(int32){}
  1877  				function setInt64(int64 i64) public returns(int64){}
  1878  				function setInt256(int256 i256) public returns(int256){}
  1879  				function setInt256List(int256[] memory i256_l) public returns(int256[] memory){}
  1880  				function setInt256Array(int256[2] memory i256_a) public returns(int256[2] memory){}
  1881  
  1882  				function setBytes1(bytes1 b1) public returns(bytes1) {}
  1883  				function setBytes32(bytes32 b32) public returns(bytes32) {}
  1884  				function setBytes(bytes memory bs) public returns(bytes memory) {}
  1885  				function setBytesList(bytes[] memory bs_l) public returns(bytes[] memory) {}
  1886  				function setBytesArray(bytes[2] memory bs_a) public returns(bytes[2] memory) {}
  1887  
  1888  				function setString(string memory s) public returns(string memory) {}
  1889  				function setStringList(string[] memory s_l) public returns(string[] memory) {}
  1890  				function setStringArray(string[2] memory s_a) public returns(string[2] memory) {}
  1891  
  1892  				function setBool(bool b) public returns(bool) {}
  1893  				function setBoolList(bool[] memory b_l) public returns(bool[] memory) {}
  1894  				function setBoolArray(bool[2] memory b_a) public returns(bool[2] memory) {}
  1895  			}`,
  1896  			`[{"constant":false,"inputs":[{"name":"u16","type":"uint16"}],"name":"setUint16","outputs":[{"name":"","type":"uint16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_a","type":"bool[2]"}],"name":"setBoolArray","outputs":[{"name":"","type":"bool[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_a","type":"address[2]"}],"name":"setAddressArray","outputs":[{"name":"","type":"address[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_l","type":"bytes[]"}],"name":"setBytesList","outputs":[{"name":"","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u8","type":"uint8"}],"name":"setUint8","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u32","type":"uint32"}],"name":"setUint32","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b","type":"bool"}],"name":"setBool","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_l","type":"int256[]"}],"name":"setInt256List","outputs":[{"name":"","type":"int256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_a","type":"uint256[2]"}],"name":"setUint256Array","outputs":[{"name":"","type":"uint256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b_l","type":"bool[]"}],"name":"setBoolList","outputs":[{"name":"","type":"bool[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs_a","type":"bytes[2]"}],"name":"setBytesArray","outputs":[{"name":"","type":"bytes[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a_l","type":"address[]"}],"name":"setAddressList","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256_a","type":"int256[2]"}],"name":"setInt256Array","outputs":[{"name":"","type":"int256[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_a","type":"string[2]"}],"name":"setStringArray","outputs":[{"name":"","type":"string[2]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s","type":"string"}],"name":"setString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u64","type":"uint64"}],"name":"setUint64","outputs":[{"name":"","type":"uint64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i16","type":"int16"}],"name":"setInt16","outputs":[{"name":"","type":"int16"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i8","type":"int8"}],"name":"setInt8","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256_l","type":"uint256[]"}],"name":"setUint256List","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i256","type":"int256"}],"name":"setInt256","outputs":[{"name":"","type":"int256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i32","type":"int32"}],"name":"setInt32","outputs":[{"name":"","type":"int32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b32","type":"bytes32"}],"name":"setBytes32","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"s_l","type":"string[]"}],"name":"setStringList","outputs":[{"name":"","type":"string[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"u256","type":"uint256"}],"name":"setUint256","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"bs","type":"bytes"}],"name":"setBytes","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"a","type":"address"}],"name":"setAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"i64","type":"int64"}],"name":"setInt64","outputs":[{"name":"","type":"int64"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"b1","type":"bytes1"}],"name":"setBytes1","outputs":[{"name":"","type":"bytes1"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]`,
  1897  			`608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037`,
  1898  			`
  1899  // This file is an automatically generated Java binding. Do not modify as any
  1900  // change will likely be lost upon the next re-generation!
  1901  
  1902  package bindtest;
  1903  
  1904  import org.ethereum.geth.*;
  1905  import java.util.*;
  1906  
  1907  public class Test {
  1908  	// ABI is the input ABI used to generate the binding from.
  1909  	public final static String ABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"u16\",\"type\":\"uint16\"}],\"name\":\"setUint16\",\"outputs\":[{\"name\":\"\",\"type\":\"uint16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_a\",\"type\":\"bool[2]\"}],\"name\":\"setBoolArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_a\",\"type\":\"address[2]\"}],\"name\":\"setAddressArray\",\"outputs\":[{\"name\":\"\",\"type\":\"address[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_l\",\"type\":\"bytes[]\"}],\"name\":\"setBytesList\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u8\",\"type\":\"uint8\"}],\"name\":\"setUint8\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u32\",\"type\":\"uint32\"}],\"name\":\"setUint32\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b\",\"type\":\"bool\"}],\"name\":\"setBool\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_l\",\"type\":\"int256[]\"}],\"name\":\"setInt256List\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_a\",\"type\":\"uint256[2]\"}],\"name\":\"setUint256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b_l\",\"type\":\"bool[]\"}],\"name\":\"setBoolList\",\"outputs\":[{\"name\":\"\",\"type\":\"bool[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs_a\",\"type\":\"bytes[2]\"}],\"name\":\"setBytesArray\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a_l\",\"type\":\"address[]\"}],\"name\":\"setAddressList\",\"outputs\":[{\"name\":\"\",\"type\":\"address[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256_a\",\"type\":\"int256[2]\"}],\"name\":\"setInt256Array\",\"outputs\":[{\"name\":\"\",\"type\":\"int256[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_a\",\"type\":\"string[2]\"}],\"name\":\"setStringArray\",\"outputs\":[{\"name\":\"\",\"type\":\"string[2]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s\",\"type\":\"string\"}],\"name\":\"setString\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u64\",\"type\":\"uint64\"}],\"name\":\"setUint64\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i16\",\"type\":\"int16\"}],\"name\":\"setInt16\",\"outputs\":[{\"name\":\"\",\"type\":\"int16\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i8\",\"type\":\"int8\"}],\"name\":\"setInt8\",\"outputs\":[{\"name\":\"\",\"type\":\"int8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256_l\",\"type\":\"uint256[]\"}],\"name\":\"setUint256List\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i256\",\"type\":\"int256\"}],\"name\":\"setInt256\",\"outputs\":[{\"name\":\"\",\"type\":\"int256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i32\",\"type\":\"int32\"}],\"name\":\"setInt32\",\"outputs\":[{\"name\":\"\",\"type\":\"int32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b32\",\"type\":\"bytes32\"}],\"name\":\"setBytes32\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"s_l\",\"type\":\"string[]\"}],\"name\":\"setStringList\",\"outputs\":[{\"name\":\"\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"u256\",\"type\":\"uint256\"}],\"name\":\"setUint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bs\",\"type\":\"bytes\"}],\"name\":\"setBytes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddress\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"i64\",\"type\":\"int64\"}],\"name\":\"setInt64\",\"outputs\":[{\"name\":\"\",\"type\":\"int64\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"b1\",\"type\":\"bytes1\"}],\"name\":\"setBytes1\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes1\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]";
  1910  	
  1911  	// BYTECODE is the compiled bytecode used for deploying new contracts.
  1912  	public final static String BYTECODE = "0x608060405234801561001057600080fd5b5061265a806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637fcaf66611610116578063c2b12a73116100b4578063da359dc81161008e578063da359dc814610666578063e30081a014610696578063e673eb32146106c6578063fba1a1c3146106f6576101e1565b8063c2b12a73146105d6578063c577796114610606578063d2282dc514610636576101e1565b80639a19a953116100f05780639a19a95314610516578063a0709e1914610546578063a53b1c1e14610576578063b7d5df31146105a6576101e1565b80637fcaf66614610486578063822cba69146104b657806386114cea146104e6576101e1565b806322722302116101835780635119655d1161015d5780635119655d146103c65780635be6b37e146103f65780636aa482fc146104265780637173b69514610456576101e1565b806322722302146103365780632766a755146103665780634d5ee6da14610396576101e1565b806316c105e2116101bf57806316c105e2146102765780631774e646146102a65780631c9352e2146102d65780631e26fd3314610306576101e1565b80630477988a146101e6578063118a971814610216578063151f547114610246575b600080fd5b61020060048036036101fb9190810190611599565b610726565b60405161020d9190611f01565b60405180910390f35b610230600480360361022b919081019061118d565b61072d565b60405161023d9190611ca6565b60405180910390f35b610260600480360361025b9190810190611123565b61073a565b60405161026d9190611c69565b60405180910390f35b610290600480360361028b9190810190611238565b610747565b60405161029d9190611d05565b60405180910390f35b6102c060048036036102bb919081019061163d565b61074e565b6040516102cd9190611f6d565b60405180910390f35b6102f060048036036102eb91908101906115eb565b610755565b6040516102fd9190611f37565b60405180910390f35b610320600480360361031b91908101906113cf565b61075c565b60405161032d9190611de5565b60405180910390f35b610350600480360361034b91908101906112a2565b610763565b60405161035d9190611d42565b60405180910390f35b610380600480360361037b9190810190611365565b61076a565b60405161038d9190611da8565b60405180910390f35b6103b060048036036103ab91908101906111b6565b610777565b6040516103bd9190611cc1565b60405180910390f35b6103e060048036036103db91908101906111f7565b61077e565b6040516103ed9190611ce3565b60405180910390f35b610410600480360361040b919081019061114c565b61078b565b60405161041d9190611c84565b60405180910390f35b610440600480360361043b9190810190611279565b610792565b60405161044d9190611d27565b60405180910390f35b610470600480360361046b91908101906112e3565b61079f565b60405161047d9190611d64565b60405180910390f35b6104a0600480360361049b9190810190611558565b6107ac565b6040516104ad9190611edf565b60405180910390f35b6104d060048036036104cb9190810190611614565b6107b3565b6040516104dd9190611f52565b60405180910390f35b61050060048036036104fb919081019061148b565b6107ba565b60405161050d9190611e58565b60405180910390f35b610530600480360361052b919081019061152f565b6107c1565b60405161053d9190611ec4565b60405180910390f35b610560600480360361055b919081019061138e565b6107c8565b60405161056d9190611dc3565b60405180910390f35b610590600480360361058b91908101906114b4565b6107cf565b60405161059d9190611e73565b60405180910390f35b6105c060048036036105bb91908101906114dd565b6107d6565b6040516105cd9190611e8e565b60405180910390f35b6105f060048036036105eb9190810190611421565b6107dd565b6040516105fd9190611e1b565b60405180910390f35b610620600480360361061b9190810190611324565b6107e4565b60405161062d9190611d86565b60405180910390f35b610650600480360361064b91908101906115c2565b6107eb565b60405161065d9190611f1c565b60405180910390f35b610680600480360361067b919081019061144a565b6107f2565b60405161068d9190611e36565b60405180910390f35b6106b060048036036106ab91908101906110fa565b6107f9565b6040516106bd9190611c4e565b60405180910390f35b6106e060048036036106db9190810190611506565b610800565b6040516106ed9190611ea9565b60405180910390f35b610710600480360361070b91908101906113f8565b610807565b60405161071d9190611e00565b60405180910390f35b6000919050565b61073561080e565b919050565b610742610830565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b610772610852565b919050565b6060919050565b610786610874565b919050565b6060919050565b61079a61089b565b919050565b6107a76108bd565b919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6060919050565b6000919050565b6060919050565b6000919050565b6000919050565b6000919050565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108835790505090565b6040805190810160405280600290602082028038833980820191505090505090565b60408051908101604052806002905b60608152602001906001900390816108cc5790505090565b60006108f082356124f2565b905092915050565b600082601f830112151561090b57600080fd5b600261091e61091982611fb5565b611f88565b9150818385602084028201111561093457600080fd5b60005b83811015610964578161094a88826108e4565b845260208401935060208301925050600181019050610937565b5050505092915050565b600082601f830112151561098157600080fd5b813561099461098f82611fd7565b611f88565b915081818352602084019350602081019050838560208402820111156109b957600080fd5b60005b838110156109e957816109cf88826108e4565b8452602084019350602083019250506001810190506109bc565b5050505092915050565b600082601f8301121515610a0657600080fd5b6002610a19610a1482611fff565b611f88565b91508183856020840282011115610a2f57600080fd5b60005b83811015610a5f5781610a458882610e9e565b845260208401935060208301925050600181019050610a32565b5050505092915050565b600082601f8301121515610a7c57600080fd5b8135610a8f610a8a82612021565b611f88565b91508181835260208401935060208101905083856020840282011115610ab457600080fd5b60005b83811015610ae45781610aca8882610e9e565b845260208401935060208301925050600181019050610ab7565b5050505092915050565b600082601f8301121515610b0157600080fd5b6002610b14610b0f82612049565b611f88565b9150818360005b83811015610b4b5781358601610b318882610eda565b845260208401935060208301925050600181019050610b1b565b5050505092915050565b600082601f8301121515610b6857600080fd5b8135610b7b610b768261206b565b611f88565b9150818183526020840193506020810190508360005b83811015610bc15781358601610ba78882610eda565b845260208401935060208301925050600181019050610b91565b5050505092915050565b600082601f8301121515610bde57600080fd5b6002610bf1610bec82612093565b611f88565b91508183856020840282011115610c0757600080fd5b60005b83811015610c375781610c1d8882610f9a565b845260208401935060208301925050600181019050610c0a565b5050505092915050565b600082601f8301121515610c5457600080fd5b8135610c67610c62826120b5565b611f88565b91508181835260208401935060208101905083856020840282011115610c8c57600080fd5b60005b83811015610cbc5781610ca28882610f9a565b845260208401935060208301925050600181019050610c8f565b5050505092915050565b600082601f8301121515610cd957600080fd5b6002610cec610ce7826120dd565b611f88565b9150818360005b83811015610d235781358601610d098882610fea565b845260208401935060208301925050600181019050610cf3565b5050505092915050565b600082601f8301121515610d4057600080fd5b8135610d53610d4e826120ff565b611f88565b9150818183526020840193506020810190508360005b83811015610d995781358601610d7f8882610fea565b845260208401935060208301925050600181019050610d69565b5050505092915050565b600082601f8301121515610db657600080fd5b6002610dc9610dc482612127565b611f88565b91508183856020840282011115610ddf57600080fd5b60005b83811015610e0f5781610df588826110aa565b845260208401935060208301925050600181019050610de2565b5050505092915050565b600082601f8301121515610e2c57600080fd5b8135610e3f610e3a82612149565b611f88565b91508181835260208401935060208101905083856020840282011115610e6457600080fd5b60005b83811015610e945781610e7a88826110aa565b845260208401935060208301925050600181019050610e67565b5050505092915050565b6000610eaa8235612504565b905092915050565b6000610ebe8235612510565b905092915050565b6000610ed2823561253c565b905092915050565b600082601f8301121515610eed57600080fd5b8135610f00610efb82612171565b611f88565b91508082526020830160208301858383011115610f1c57600080fd5b610f278382846125cd565b50505092915050565b600082601f8301121515610f4357600080fd5b8135610f56610f518261219d565b611f88565b91508082526020830160208301858383011115610f7257600080fd5b610f7d8382846125cd565b50505092915050565b6000610f928235612546565b905092915050565b6000610fa68235612553565b905092915050565b6000610fba823561255d565b905092915050565b6000610fce823561256a565b905092915050565b6000610fe28235612577565b905092915050565b600082601f8301121515610ffd57600080fd5b813561101061100b826121c9565b611f88565b9150808252602083016020830185838301111561102c57600080fd5b6110378382846125cd565b50505092915050565b600082601f830112151561105357600080fd5b8135611066611061826121f5565b611f88565b9150808252602083016020830185838301111561108257600080fd5b61108d8382846125cd565b50505092915050565b60006110a28235612584565b905092915050565b60006110b68235612592565b905092915050565b60006110ca823561259c565b905092915050565b60006110de82356125ac565b905092915050565b60006110f282356125c0565b905092915050565b60006020828403121561110c57600080fd5b600061111a848285016108e4565b91505092915050565b60006040828403121561113557600080fd5b6000611143848285016108f8565b91505092915050565b60006020828403121561115e57600080fd5b600082013567ffffffffffffffff81111561117857600080fd5b6111848482850161096e565b91505092915050565b60006040828403121561119f57600080fd5b60006111ad848285016109f3565b91505092915050565b6000602082840312156111c857600080fd5b600082013567ffffffffffffffff8111156111e257600080fd5b6111ee84828501610a69565b91505092915050565b60006020828403121561120957600080fd5b600082013567ffffffffffffffff81111561122357600080fd5b61122f84828501610aee565b91505092915050565b60006020828403121561124a57600080fd5b600082013567ffffffffffffffff81111561126457600080fd5b61127084828501610b55565b91505092915050565b60006040828403121561128b57600080fd5b600061129984828501610bcb565b91505092915050565b6000602082840312156112b457600080fd5b600082013567ffffffffffffffff8111156112ce57600080fd5b6112da84828501610c41565b91505092915050565b6000602082840312156112f557600080fd5b600082013567ffffffffffffffff81111561130f57600080fd5b61131b84828501610cc6565b91505092915050565b60006020828403121561133657600080fd5b600082013567ffffffffffffffff81111561135057600080fd5b61135c84828501610d2d565b91505092915050565b60006040828403121561137757600080fd5b600061138584828501610da3565b91505092915050565b6000602082840312156113a057600080fd5b600082013567ffffffffffffffff8111156113ba57600080fd5b6113c684828501610e19565b91505092915050565b6000602082840312156113e157600080fd5b60006113ef84828501610e9e565b91505092915050565b60006020828403121561140a57600080fd5b600061141884828501610eb2565b91505092915050565b60006020828403121561143357600080fd5b600061144184828501610ec6565b91505092915050565b60006020828403121561145c57600080fd5b600082013567ffffffffffffffff81111561147657600080fd5b61148284828501610f30565b91505092915050565b60006020828403121561149d57600080fd5b60006114ab84828501610f86565b91505092915050565b6000602082840312156114c657600080fd5b60006114d484828501610f9a565b91505092915050565b6000602082840312156114ef57600080fd5b60006114fd84828501610fae565b91505092915050565b60006020828403121561151857600080fd5b600061152684828501610fc2565b91505092915050565b60006020828403121561154157600080fd5b600061154f84828501610fd6565b91505092915050565b60006020828403121561156a57600080fd5b600082013567ffffffffffffffff81111561158457600080fd5b61159084828501611040565b91505092915050565b6000602082840312156115ab57600080fd5b60006115b984828501611096565b91505092915050565b6000602082840312156115d457600080fd5b60006115e2848285016110aa565b91505092915050565b6000602082840312156115fd57600080fd5b600061160b848285016110be565b91505092915050565b60006020828403121561162657600080fd5b6000611634848285016110d2565b91505092915050565b60006020828403121561164f57600080fd5b600061165d848285016110e6565b91505092915050565b61166f816123f7565b82525050565b61167e816122ab565b61168782612221565b60005b828110156116b95761169d858351611666565b6116a68261235b565b915060208501945060018101905061168a565b5050505050565b60006116cb826122b6565b8084526020840193506116dd8361222b565b60005b8281101561170f576116f3868351611666565b6116fc82612368565b91506020860195506001810190506116e0565b50849250505092915050565b611724816122c1565b61172d82612238565b60005b8281101561175f57611743858351611ab3565b61174c82612375565b9150602085019450600181019050611730565b5050505050565b6000611771826122cc565b80845260208401935061178383612242565b60005b828110156117b557611799868351611ab3565b6117a282612382565b9150602086019550600181019050611786565b50849250505092915050565b60006117cc826122d7565b836020820285016117dc8561224f565b60005b848110156118155783830388526117f7838351611b16565b92506118028261238f565b91506020880197506001810190506117df565b508196508694505050505092915050565b6000611831826122e2565b8084526020840193508360208202850161184a85612259565b60005b84811015611883578383038852611865838351611b16565b92506118708261239c565b915060208801975060018101905061184d565b508196508694505050505092915050565b61189d816122ed565b6118a682612266565b60005b828110156118d8576118bc858351611b5b565b6118c5826123a9565b91506020850194506001810190506118a9565b5050505050565b60006118ea826122f8565b8084526020840193506118fc83612270565b60005b8281101561192e57611912868351611b5b565b61191b826123b6565b91506020860195506001810190506118ff565b50849250505092915050565b600061194582612303565b836020820285016119558561227d565b60005b8481101561198e578383038852611970838351611bcd565b925061197b826123c3565b9150602088019750600181019050611958565b508196508694505050505092915050565b60006119aa8261230e565b808452602084019350836020820285016119c385612287565b60005b848110156119fc5783830388526119de838351611bcd565b92506119e9826123d0565b91506020880197506001810190506119c6565b508196508694505050505092915050565b611a1681612319565b611a1f82612294565b60005b82811015611a5157611a35858351611c12565b611a3e826123dd565b9150602085019450600181019050611a22565b5050505050565b6000611a6382612324565b808452602084019350611a758361229e565b60005b82811015611aa757611a8b868351611c12565b611a94826123ea565b9150602086019550600181019050611a78565b50849250505092915050565b611abc81612409565b82525050565b611acb81612415565b82525050565b611ada81612441565b82525050565b6000611aeb8261233a565b808452611aff8160208601602086016125dc565b611b088161260f565b602085010191505092915050565b6000611b218261232f565b808452611b358160208601602086016125dc565b611b3e8161260f565b602085010191505092915050565b611b558161244b565b82525050565b611b6481612458565b82525050565b611b7381612462565b82525050565b611b828161246f565b82525050565b611b918161247c565b82525050565b6000611ba282612350565b808452611bb68160208601602086016125dc565b611bbf8161260f565b602085010191505092915050565b6000611bd882612345565b808452611bec8160208601602086016125dc565b611bf58161260f565b602085010191505092915050565b611c0c81612489565b82525050565b611c1b816124b7565b82525050565b611c2a816124c1565b82525050565b611c39816124d1565b82525050565b611c48816124e5565b82525050565b6000602082019050611c636000830184611666565b92915050565b6000604082019050611c7e6000830184611675565b92915050565b60006020820190508181036000830152611c9e81846116c0565b905092915050565b6000604082019050611cbb600083018461171b565b92915050565b60006020820190508181036000830152611cdb8184611766565b905092915050565b60006020820190508181036000830152611cfd81846117c1565b905092915050565b60006020820190508181036000830152611d1f8184611826565b905092915050565b6000604082019050611d3c6000830184611894565b92915050565b60006020820190508181036000830152611d5c81846118df565b905092915050565b60006020820190508181036000830152611d7e818461193a565b905092915050565b60006020820190508181036000830152611da0818461199f565b905092915050565b6000604082019050611dbd6000830184611a0d565b92915050565b60006020820190508181036000830152611ddd8184611a58565b905092915050565b6000602082019050611dfa6000830184611ab3565b92915050565b6000602082019050611e156000830184611ac2565b92915050565b6000602082019050611e306000830184611ad1565b92915050565b60006020820190508181036000830152611e508184611ae0565b905092915050565b6000602082019050611e6d6000830184611b4c565b92915050565b6000602082019050611e886000830184611b5b565b92915050565b6000602082019050611ea36000830184611b6a565b92915050565b6000602082019050611ebe6000830184611b79565b92915050565b6000602082019050611ed96000830184611b88565b92915050565b60006020820190508181036000830152611ef98184611b97565b905092915050565b6000602082019050611f166000830184611c03565b92915050565b6000602082019050611f316000830184611c12565b92915050565b6000602082019050611f4c6000830184611c21565b92915050565b6000602082019050611f676000830184611c30565b92915050565b6000602082019050611f826000830184611c3f565b92915050565b6000604051905081810181811067ffffffffffffffff82111715611fab57600080fd5b8060405250919050565b600067ffffffffffffffff821115611fcc57600080fd5b602082029050919050565b600067ffffffffffffffff821115611fee57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561201657600080fd5b602082029050919050565b600067ffffffffffffffff82111561203857600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561206057600080fd5b602082029050919050565b600067ffffffffffffffff82111561208257600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120aa57600080fd5b602082029050919050565b600067ffffffffffffffff8211156120cc57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff8211156120f457600080fd5b602082029050919050565b600067ffffffffffffffff82111561211657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561213e57600080fd5b602082029050919050565b600067ffffffffffffffff82111561216057600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111561218857600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121b457600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156121e057600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561220c57600080fd5b601f19601f8301169050602081019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600060029050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600061240282612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006124fd82612497565b9050919050565b60008115159050919050565b60007fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6000819050919050565b60008160010b9050919050565b6000819050919050565b60008160030b9050919050565b60008160070b9050919050565b60008160000b9050919050565b600061ffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156125fa5780820151818401526020810190506125df565b83811115612609576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a723058206fe37171cf1b10ebd291cfdca61d67e7fc3c208795e999c833c42a14d86cf00d6c6578706572696d656e74616cf50037";
  1913  
  1914  	// deploy deploys a new Ethereum contract, binding an instance of Test to it.
  1915  	public static Test deploy(TransactOpts auth, EthereumClient client) throws Exception {
  1916  		Interfaces args = Geth.newInterfaces(0);
  1917  		String bytecode = BYTECODE;
  1918  		return new Test(Geth.deployContract(auth, ABI, Geth.decodeFromHex(bytecode), client, args));
  1919  	}
  1920  
  1921  	// Internal constructor used by contract deployment.
  1922  	private Test(BoundContract deployment) {
  1923  		this.Address  = deployment.getAddress();
  1924  		this.Deployer = deployment.getDeployer();
  1925  		this.Contract = deployment;
  1926  	}
  1927  	
  1928  	// Ethereum address where this contract is located at.
  1929  	public final Address Address;
  1930  
  1931  	// Ethereum transaction in which this contract was deployed (if known!).
  1932  	public final Transaction Deployer;
  1933  
  1934  	// Contract instance bound to a blockchain address.
  1935  	private final BoundContract Contract;
  1936  
  1937  	// Creates a new instance of Test, bound to a specific deployed contract.
  1938  	public Test(Address address, EthereumClient client) throws Exception {
  1939  		this(Geth.bindContract(address, ABI, client));
  1940  	}
  1941  
  1942  	// setAddress is a paid mutator transaction binding the contract method 0xe30081a0.
  1943  	//
  1944  	// Solidity: function setAddress(address a) returns(address)
  1945  	public Transaction setAddress(TransactOpts opts, Address a) throws Exception {
  1946  		Interfaces args = Geth.newInterfaces(1);
  1947  		Interface arg0 = Geth.newInterface();arg0.setAddress(a);args.set(0,arg0);
  1948  		
  1949  		return this.Contract.transact(opts, "setAddress"	, args);
  1950  	}
  1951  	
  1952  	// setAddressArray is a paid mutator transaction binding the contract method 0x151f5471.
  1953  	//
  1954  	// Solidity: function setAddressArray(address[2] a_a) returns(address[2])
  1955  	public Transaction setAddressArray(TransactOpts opts, Addresses a_a) throws Exception {
  1956  		Interfaces args = Geth.newInterfaces(1);
  1957  		Interface arg0 = Geth.newInterface();arg0.setAddresses(a_a);args.set(0,arg0);
  1958  		
  1959  		return this.Contract.transact(opts, "setAddressArray"	, args);
  1960  	}
  1961  	
  1962  	// setAddressList is a paid mutator transaction binding the contract method 0x5be6b37e.
  1963  	//
  1964  	// Solidity: function setAddressList(address[] a_l) returns(address[])
  1965  	public Transaction setAddressList(TransactOpts opts, Addresses a_l) throws Exception {
  1966  		Interfaces args = Geth.newInterfaces(1);
  1967  		Interface arg0 = Geth.newInterface();arg0.setAddresses(a_l);args.set(0,arg0);
  1968  		
  1969  		return this.Contract.transact(opts, "setAddressList"	, args);
  1970  	}
  1971  	
  1972  	// setBool is a paid mutator transaction binding the contract method 0x1e26fd33.
  1973  	//
  1974  	// Solidity: function setBool(bool b) returns(bool)
  1975  	public Transaction setBool(TransactOpts opts, boolean b) throws Exception {
  1976  		Interfaces args = Geth.newInterfaces(1);
  1977  		Interface arg0 = Geth.newInterface();arg0.setBool(b);args.set(0,arg0);
  1978  		
  1979  		return this.Contract.transact(opts, "setBool"	, args);
  1980  	}
  1981  	
  1982  	// setBoolArray is a paid mutator transaction binding the contract method 0x118a9718.
  1983  	//
  1984  	// Solidity: function setBoolArray(bool[2] b_a) returns(bool[2])
  1985  	public Transaction setBoolArray(TransactOpts opts, Bools b_a) throws Exception {
  1986  		Interfaces args = Geth.newInterfaces(1);
  1987  		Interface arg0 = Geth.newInterface();arg0.setBools(b_a);args.set(0,arg0);
  1988  		
  1989  		return this.Contract.transact(opts, "setBoolArray"	, args);
  1990  	}
  1991  	
  1992  	// setBoolList is a paid mutator transaction binding the contract method 0x4d5ee6da.
  1993  	//
  1994  	// Solidity: function setBoolList(bool[] b_l) returns(bool[])
  1995  	public Transaction setBoolList(TransactOpts opts, Bools b_l) throws Exception {
  1996  		Interfaces args = Geth.newInterfaces(1);
  1997  		Interface arg0 = Geth.newInterface();arg0.setBools(b_l);args.set(0,arg0);
  1998  		
  1999  		return this.Contract.transact(opts, "setBoolList"	, args);
  2000  	}
  2001  	
  2002  	// setBytes is a paid mutator transaction binding the contract method 0xda359dc8.
  2003  	//
  2004  	// Solidity: function setBytes(bytes bs) returns(bytes)
  2005  	public Transaction setBytes(TransactOpts opts, byte[] bs) throws Exception {
  2006  		Interfaces args = Geth.newInterfaces(1);
  2007  		Interface arg0 = Geth.newInterface();arg0.setBinary(bs);args.set(0,arg0);
  2008  		
  2009  		return this.Contract.transact(opts, "setBytes"	, args);
  2010  	}
  2011  	
  2012  	// setBytes1 is a paid mutator transaction binding the contract method 0xfba1a1c3.
  2013  	//
  2014  	// Solidity: function setBytes1(bytes1 b1) returns(bytes1)
  2015  	public Transaction setBytes1(TransactOpts opts, byte[] b1) throws Exception {
  2016  		Interfaces args = Geth.newInterfaces(1);
  2017  		Interface arg0 = Geth.newInterface();arg0.setBinary(b1);args.set(0,arg0);
  2018  		
  2019  		return this.Contract.transact(opts, "setBytes1"	, args);
  2020  	}
  2021  	
  2022  	// setBytes32 is a paid mutator transaction binding the contract method 0xc2b12a73.
  2023  	//
  2024  	// Solidity: function setBytes32(bytes32 b32) returns(bytes32)
  2025  	public Transaction setBytes32(TransactOpts opts, byte[] b32) throws Exception {
  2026  		Interfaces args = Geth.newInterfaces(1);
  2027  		Interface arg0 = Geth.newInterface();arg0.setBinary(b32);args.set(0,arg0);
  2028  		
  2029  		return this.Contract.transact(opts, "setBytes32"	, args);
  2030  	}
  2031  	
  2032  	// setBytesArray is a paid mutator transaction binding the contract method 0x5119655d.
  2033  	//
  2034  	// Solidity: function setBytesArray(bytes[2] bs_a) returns(bytes[2])
  2035  	public Transaction setBytesArray(TransactOpts opts, Binaries bs_a) throws Exception {
  2036  		Interfaces args = Geth.newInterfaces(1);
  2037  		Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_a);args.set(0,arg0);
  2038  		
  2039  		return this.Contract.transact(opts, "setBytesArray"	, args);
  2040  	}
  2041  	
  2042  	// setBytesList is a paid mutator transaction binding the contract method 0x16c105e2.
  2043  	//
  2044  	// Solidity: function setBytesList(bytes[] bs_l) returns(bytes[])
  2045  	public Transaction setBytesList(TransactOpts opts, Binaries bs_l) throws Exception {
  2046  		Interfaces args = Geth.newInterfaces(1);
  2047  		Interface arg0 = Geth.newInterface();arg0.setBinaries(bs_l);args.set(0,arg0);
  2048  		
  2049  		return this.Contract.transact(opts, "setBytesList"	, args);
  2050  	}
  2051  	
  2052  	// setInt16 is a paid mutator transaction binding the contract method 0x86114cea.
  2053  	//
  2054  	// Solidity: function setInt16(int16 i16) returns(int16)
  2055  	public Transaction setInt16(TransactOpts opts, short i16) throws Exception {
  2056  		Interfaces args = Geth.newInterfaces(1);
  2057  		Interface arg0 = Geth.newInterface();arg0.setInt16(i16);args.set(0,arg0);
  2058  		
  2059  		return this.Contract.transact(opts, "setInt16"	, args);
  2060  	}
  2061  	
  2062  	// setInt256 is a paid mutator transaction binding the contract method 0xa53b1c1e.
  2063  	//
  2064  	// Solidity: function setInt256(int256 i256) returns(int256)
  2065  	public Transaction setInt256(TransactOpts opts, BigInt i256) throws Exception {
  2066  		Interfaces args = Geth.newInterfaces(1);
  2067  		Interface arg0 = Geth.newInterface();arg0.setBigInt(i256);args.set(0,arg0);
  2068  		
  2069  		return this.Contract.transact(opts, "setInt256"	, args);
  2070  	}
  2071  	
  2072  	// setInt256Array is a paid mutator transaction binding the contract method 0x6aa482fc.
  2073  	//
  2074  	// Solidity: function setInt256Array(int256[2] i256_a) returns(int256[2])
  2075  	public Transaction setInt256Array(TransactOpts opts, BigInts i256_a) throws Exception {
  2076  		Interfaces args = Geth.newInterfaces(1);
  2077  		Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_a);args.set(0,arg0);
  2078  		
  2079  		return this.Contract.transact(opts, "setInt256Array"	, args);
  2080  	}
  2081  	
  2082  	// setInt256List is a paid mutator transaction binding the contract method 0x22722302.
  2083  	//
  2084  	// Solidity: function setInt256List(int256[] i256_l) returns(int256[])
  2085  	public Transaction setInt256List(TransactOpts opts, BigInts i256_l) throws Exception {
  2086  		Interfaces args = Geth.newInterfaces(1);
  2087  		Interface arg0 = Geth.newInterface();arg0.setBigInts(i256_l);args.set(0,arg0);
  2088  		
  2089  		return this.Contract.transact(opts, "setInt256List"	, args);
  2090  	}
  2091  	
  2092  	// setInt32 is a paid mutator transaction binding the contract method 0xb7d5df31.
  2093  	//
  2094  	// Solidity: function setInt32(int32 i32) returns(int32)
  2095  	public Transaction setInt32(TransactOpts opts, int i32) throws Exception {
  2096  		Interfaces args = Geth.newInterfaces(1);
  2097  		Interface arg0 = Geth.newInterface();arg0.setInt32(i32);args.set(0,arg0);
  2098  		
  2099  		return this.Contract.transact(opts, "setInt32"	, args);
  2100  	}
  2101  	
  2102  	// setInt64 is a paid mutator transaction binding the contract method 0xe673eb32.
  2103  	//
  2104  	// Solidity: function setInt64(int64 i64) returns(int64)
  2105  	public Transaction setInt64(TransactOpts opts, long i64) throws Exception {
  2106  		Interfaces args = Geth.newInterfaces(1);
  2107  		Interface arg0 = Geth.newInterface();arg0.setInt64(i64);args.set(0,arg0);
  2108  		
  2109  		return this.Contract.transact(opts, "setInt64"	, args);
  2110  	}
  2111  	
  2112  	// setInt8 is a paid mutator transaction binding the contract method 0x9a19a953.
  2113  	//
  2114  	// Solidity: function setInt8(int8 i8) returns(int8)
  2115  	public Transaction setInt8(TransactOpts opts, byte i8) throws Exception {
  2116  		Interfaces args = Geth.newInterfaces(1);
  2117  		Interface arg0 = Geth.newInterface();arg0.setInt8(i8);args.set(0,arg0);
  2118  		
  2119  		return this.Contract.transact(opts, "setInt8"	, args);
  2120  	}
  2121  	
  2122  	// setString is a paid mutator transaction binding the contract method 0x7fcaf666.
  2123  	//
  2124  	// Solidity: function setString(string s) returns(string)
  2125  	public Transaction setString(TransactOpts opts, String s) throws Exception {
  2126  		Interfaces args = Geth.newInterfaces(1);
  2127  		Interface arg0 = Geth.newInterface();arg0.setString(s);args.set(0,arg0);
  2128  		
  2129  		return this.Contract.transact(opts, "setString"	, args);
  2130  	}
  2131  	
  2132  	// setStringArray is a paid mutator transaction binding the contract method 0x7173b695.
  2133  	//
  2134  	// Solidity: function setStringArray(string[2] s_a) returns(string[2])
  2135  	public Transaction setStringArray(TransactOpts opts, Strings s_a) throws Exception {
  2136  		Interfaces args = Geth.newInterfaces(1);
  2137  		Interface arg0 = Geth.newInterface();arg0.setStrings(s_a);args.set(0,arg0);
  2138  		
  2139  		return this.Contract.transact(opts, "setStringArray"	, args);
  2140  	}
  2141  	
  2142  	// setStringList is a paid mutator transaction binding the contract method 0xc5777961.
  2143  	//
  2144  	// Solidity: function setStringList(string[] s_l) returns(string[])
  2145  	public Transaction setStringList(TransactOpts opts, Strings s_l) throws Exception {
  2146  		Interfaces args = Geth.newInterfaces(1);
  2147  		Interface arg0 = Geth.newInterface();arg0.setStrings(s_l);args.set(0,arg0);
  2148  		
  2149  		return this.Contract.transact(opts, "setStringList"	, args);
  2150  	}
  2151  	
  2152  	// setUint16 is a paid mutator transaction binding the contract method 0x0477988a.
  2153  	//
  2154  	// Solidity: function setUint16(uint16 u16) returns(uint16)
  2155  	public Transaction setUint16(TransactOpts opts, BigInt u16) throws Exception {
  2156  		Interfaces args = Geth.newInterfaces(1);
  2157  		Interface arg0 = Geth.newInterface();arg0.setUint16(u16);args.set(0,arg0);
  2158  		
  2159  		return this.Contract.transact(opts, "setUint16"	, args);
  2160  	}
  2161  	
  2162  	// setUint256 is a paid mutator transaction binding the contract method 0xd2282dc5.
  2163  	//
  2164  	// Solidity: function setUint256(uint256 u256) returns(uint256)
  2165  	public Transaction setUint256(TransactOpts opts, BigInt u256) throws Exception {
  2166  		Interfaces args = Geth.newInterfaces(1);
  2167  		Interface arg0 = Geth.newInterface();arg0.setBigInt(u256);args.set(0,arg0);
  2168  		
  2169  		return this.Contract.transact(opts, "setUint256"	, args);
  2170  	}
  2171  	
  2172  	// setUint256Array is a paid mutator transaction binding the contract method 0x2766a755.
  2173  	//
  2174  	// Solidity: function setUint256Array(uint256[2] u256_a) returns(uint256[2])
  2175  	public Transaction setUint256Array(TransactOpts opts, BigInts u256_a) throws Exception {
  2176  		Interfaces args = Geth.newInterfaces(1);
  2177  		Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_a);args.set(0,arg0);
  2178  		
  2179  		return this.Contract.transact(opts, "setUint256Array"	, args);
  2180  	}
  2181  	
  2182  	// setUint256List is a paid mutator transaction binding the contract method 0xa0709e19.
  2183  	//
  2184  	// Solidity: function setUint256List(uint256[] u256_l) returns(uint256[])
  2185  	public Transaction setUint256List(TransactOpts opts, BigInts u256_l) throws Exception {
  2186  		Interfaces args = Geth.newInterfaces(1);
  2187  		Interface arg0 = Geth.newInterface();arg0.setBigInts(u256_l);args.set(0,arg0);
  2188  		
  2189  		return this.Contract.transact(opts, "setUint256List"	, args);
  2190  	}
  2191  	
  2192  	// setUint32 is a paid mutator transaction binding the contract method 0x1c9352e2.
  2193  	//
  2194  	// Solidity: function setUint32(uint32 u32) returns(uint32)
  2195  	public Transaction setUint32(TransactOpts opts, BigInt u32) throws Exception {
  2196  		Interfaces args = Geth.newInterfaces(1);
  2197  		Interface arg0 = Geth.newInterface();arg0.setUint32(u32);args.set(0,arg0);
  2198  		
  2199  		return this.Contract.transact(opts, "setUint32"	, args);
  2200  	}
  2201  	
  2202  	// setUint64 is a paid mutator transaction binding the contract method 0x822cba69.
  2203  	//
  2204  	// Solidity: function setUint64(uint64 u64) returns(uint64)
  2205  	public Transaction setUint64(TransactOpts opts, BigInt u64) throws Exception {
  2206  		Interfaces args = Geth.newInterfaces(1);
  2207  		Interface arg0 = Geth.newInterface();arg0.setUint64(u64);args.set(0,arg0);
  2208  		
  2209  		return this.Contract.transact(opts, "setUint64"	, args);
  2210  	}
  2211  	
  2212  	// setUint8 is a paid mutator transaction binding the contract method 0x1774e646.
  2213  	//
  2214  	// Solidity: function setUint8(uint8 u8) returns(uint8)
  2215  	public Transaction setUint8(TransactOpts opts, BigInt u8) throws Exception {
  2216  		Interfaces args = Geth.newInterfaces(1);
  2217  		Interface arg0 = Geth.newInterface();arg0.setUint8(u8);args.set(0,arg0);
  2218  		
  2219  		return this.Contract.transact(opts, "setUint8"	, args);
  2220  	}
  2221  }
  2222  `,
  2223  		},
  2224  	}
  2225  	for i, c := range cases {
  2226  		binding, err := Bind([]string{c.name}, []string{c.abi}, []string{c.bytecode}, []string{c.bytecode}, nil, "bindtest", LangJava, nil, nil)
  2227  		if err != nil {
  2228  			t.Fatalf("test %d: failed to generate binding: %v", i, err)
  2229  		}
  2230  		// Remove empty lines
  2231  		removeEmptys := func(input string) string {
  2232  			lines := strings.Split(input, "\n")
  2233  			var index int
  2234  			for _, line := range lines {
  2235  				if strings.TrimSpace(line) != "" {
  2236  					lines[index] = line
  2237  					index += 1
  2238  				}
  2239  			}
  2240  			lines = lines[:index]
  2241  			return strings.Join(lines, "\n")
  2242  		}
  2243  		binding = removeEmptys(binding)
  2244  		expect := removeEmptys(c.expected)
  2245  		if binding != expect {
  2246  			t.Fatalf("test %d: generated binding mismatch, has %s, want %s", i, binding, c.expected)
  2247  		}
  2248  	}
  2249  }