github.com/snowblossomcoin/go-ethereum@v1.9.25/accounts/abi/bind/bind_test.go (about)

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