0x608060405234801561001057600080fd5b50610991806100206000396000f3fe6080604052600436106100555760003560e01c8063095ea7b31461005a57806327e235e3146100835780632e1a7d4d146100c05780635c658165146100e957806368f8c2a414610126578063d0e30db01461014f575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c91906106d7565b610159565b005b34801561008f57600080fd5b506100aa60048036038101906100a59190610717565b6101de565b6040516100b79190610753565b60405180910390f35b3480156100cc57600080fd5b506100e760048036038101906100e2919061076e565b6101f6565b005b3480156100f557600080fd5b50610110600480360381019061010b919061079b565b610364565b60405161011d9190610753565b60405180910390f35b34801561013257600080fd5b5061014d600480360381019061014891906106d7565b610389565b005b610157610599565b005b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b60006020528060005260406000206000915090505481565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161026e90610838565b60405180910390fd5b806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546102c59190610887565b925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610312573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040516103599190610753565b60405180910390a250565b6001602052816000526040600020602052806000526040600020600091509150505481565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054811115610448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043f90610907565b60405180910390fd5b80600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104d49190610887565b92505081905550806000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105299190610927565b925050819055503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f0d49f50d6dd629f4e4070731edb0abd680823ab1cbd43d89590522da4b5b32e78360405161058d9190610753565b60405180910390a35050565b346000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105e79190610927565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040516106349190610753565b60405180910390a2565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061066e82610643565b9050919050565b61067e81610663565b811461068957600080fd5b50565b60008135905061069b81610675565b92915050565b6000819050919050565b6106b4816106a1565b81146106bf57600080fd5b50565b6000813590506106d1816106ab565b92915050565b600080604083850312156106ee576106ed61063e565b5b60006106fc8582860161068c565b925050602061070d858286016106c2565b9150509250929050565b60006020828403121561072d5761072c61063e565b5b600061073b8482850161068c565b91505092915050565b61074d816106a1565b82525050565b60006020820190506107686000830184610744565b92915050565b6000602082840312156107845761078361063e565b5b6000610792848285016106c2565b91505092915050565b600080604083850312156107b2576107b161063e565b5b60006107c08582860161068c565b92505060206107d18582860161068c565b9150509250929050565b600082825260208201905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b60006108226014836107db565b915061082d826107ec565b602082019050919050565b6000602082019050818103600083015261085181610815565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610892826106a1565b915061089d836106a1565b92508282039050818111156108b5576108b4610858565b5b92915050565b7f496e73756666696369656e7420616c6c6f77616e636500000000000000000000600082015250565b60006108f16016836107db565b91506108fc826108bb565b602082019050919050565b60006020820190508181036000830152610920816108e4565b9050919050565b6000610932826106a1565b915061093d836106a1565b925082820190508082111561095557610954610858565b5b9291505056fea2646970667358221220b1a1879fadd1d1d82be21dcd78ea7b2b01fb0ae1963ac7cd92426487ae54357d64736f6c63430008120033