60806040523480156200001157600080fd5b50600062000024620001d260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506009600a620000d2919062000374565b633b9aca00620000e39190620003c5565b60016000620000f7620001d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000145620001d260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a620001a4919062000374565b633b9aca00620001b59190620003c5565b604051620001c4919062000421565b60405180910390a36200043e565b600033905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620002685780860481111562000240576200023f620001da565b5b6001851615620002505780820291505b8081029050620002608562000209565b945062000220565b94509492505050565b60008262000283576001905062000356565b8162000293576000905062000356565b8160018114620002ac5760028114620002b757620002ed565b600191505062000356565b60ff841115620002cc57620002cb620001da565b5b8360020a915084821115620002e657620002e5620001da565b5b5062000356565b5060208310610133831016604e8410600b8410161715620003275782820a905083811115620003215762000320620001da565b5b62000356565b62000336848484600162000216565b9250905081840481111562000350576200034f620001da565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000381826200035d565b91506200038e8362000367565b9250620003bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000271565b905092915050565b6000620003d2826200035d565b9150620003df836200035d565b9250828202620003ef816200035d565b91508282048414831517620004095762000408620001da565b5b5092915050565b6200041b816200035d565b82525050565b600060208201905062000438600083018462000410565b92915050565b6116bf806200044e6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806370a082311161007157806370a082311461018f578063715018a6146101bf5780638da5cb5b146101c957806395d89b41146101e7578063a9059cbb14610205578063dd62ed3e14610235576100b4565b806306fdde03146100b9578063095ea7b3146100d75780630b246ca41461010757806318160ddd1461012357806323b872dd14610141578063313ce56714610171575b600080fd5b6100c1610265565b6040516100ce9190610ec8565b60405180910390f35b6100f160048036038101906100ec9190610f83565b6102a2565b6040516100fe9190610fde565b60405180910390f35b610121600480360381019061011c9190610f83565b6103a2565b005b61012b610410565b6040516101389190611008565b60405180910390f35b61015b60048036038101906101569190611023565b610434565b6040516101689190610fde565b60405180910390f35b6101796107de565b6040516101869190611092565b60405180910390f35b6101a960048036038101906101a491906110ad565b6107e7565b6040516101b69190611008565b60405180910390f35b6101c7610830565b005b6101d161096a565b6040516101de91906110e9565b60405180910390f35b6101ef610993565b6040516101fc9190610ec8565b60405180910390f35b61021f600480360381019061021a9190610f83565b6109d0565b60405161022c9190610fde565b60405180910390f35b61024f600480360381019061024a9190611104565b610cbe565b60405161025c9190611008565b60405180910390f35b60606040518060400160405280600b81526020017f54686520446f6765736f6e000000000000000000000000000000000000000000815250905090565b600081600260006102b1610d45565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff1661034b610d45565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103909190611008565b60405180910390a36001905092915050565b6103aa610d4d565b6103e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103e0906111b6565b60405180910390fd5b600060649050600081831115905061040081610d5c565b61040a8484610d9f565b50505050565b60006009600a6104209190611338565b633b9aca0061042f9190611383565b905090565b600081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610480610d45565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156104fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f390611437565b60405180910390fd5b60006064600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461054b9190611383565b6105559190611486565b90506000818461056591906114b7565b905083600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105b691906114b7565b9250508190555080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461060c91906114eb565b9250508190555083600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061065d610d45565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106a691906114b7565b92505081905550816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106fe91906114eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516107629190611008565b60405180910390a361dead73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107c99190611008565b60405180910390a36001925050509392505050565b60006009905090565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610838610d45565b73ffffffffffffffffffffffffffffffffffffffff1661085661096a565b73ffffffffffffffffffffffffffffffffffffffff16146108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a39061156b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f446f6765736f6e00000000000000000000000000000000000000000000000000815250905090565b600081600160006109df610d45565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610a5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a52906115fd565b60405180910390fd5b6000606460036000610a6b610d45565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484610ab19190611383565b610abb9190611486565b905060008184610acb91906114b7565b90508360016000610ada610d45565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b2391906114b7565b9250508190555080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b7991906114eb565b92505081905550816001600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bd191906114eb565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16610bf7610d45565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c3c9190611008565b60405180910390a361dead73ffffffffffffffffffffffffffffffffffffffff16610c65610d45565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610caa9190611008565b60405180910390a360019250505092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6000610d57610de7565b905090565b80610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390611669565b60405180910390fd5b50565b80600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000732b9db15152188a7ec045e80da6b089acf8f21e5c73ffffffffffffffffffffffffffffffffffffffff16610e1c610d45565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e72578082015181840152602081019050610e57565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e9a82610e38565b610ea48185610e43565b9350610eb4818560208601610e54565b610ebd81610e7e565b840191505092915050565b60006020820190508181036000830152610ee28184610e8f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f1a82610eef565b9050919050565b610f2a81610f0f565b8114610f3557600080fd5b50565b600081359050610f4781610f21565b92915050565b6000819050919050565b610f6081610f4d565b8114610f6b57600080fd5b50565b600081359050610f7d81610f57565b92915050565b60008060408385031215610f9a57610f99610eea565b5b6000610fa885828601610f38565b9250506020610fb985828601610f6e565b9150509250929050565b60008115159050919050565b610fd881610fc3565b82525050565b6000602082019050610ff36000830184610fcf565b92915050565b61100281610f4d565b82525050565b600060208201905061101d6000830184610ff9565b92915050565b60008060006060848603121561103c5761103b610eea565b5b600061104a86828701610f38565b935050602061105b86828701610f38565b925050604061106c86828701610f6e565b9150509250925092565b600060ff82169050919050565b61108c81611076565b82525050565b60006020820190506110a76000830184611083565b92915050565b6000602082840312156110c3576110c2610eea565b5b60006110d184828501610f38565b91505092915050565b6110e381610f0f565b82525050565b60006020820190506110fe60008301846110da565b92915050565b6000806040838503121561111b5761111a610eea565b5b600061112985828601610f38565b925050602061113a85828601610f38565b9150509250929050565b7f43616c6c6572206973206e6f7420746865206f726967696e616c2063616c6c6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006111a0602183610e43565b91506111ab82611144565b604082019050919050565b600060208201905081810360008301526111cf81611193565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561125c57808604811115611238576112376111d6565b5b60018516156112475780820291505b808102905061125585611205565b945061121c565b94509492505050565b6000826112755760019050611331565b816112835760009050611331565b816001811461129957600281146112a3576112d2565b6001915050611331565b60ff8411156112b5576112b46111d6565b5b8360020a9150848211156112cc576112cb6111d6565b5b50611331565b5060208310610133831016604e8410600b84101617156113075782820a905083811115611302576113016111d6565b5b611331565b6113148484846001611212565b9250905081840481111561132b5761132a6111d6565b5b81810290505b9392505050565b600061134382610f4d565b915061134e83611076565b925061137b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484611265565b905092915050565b600061138e82610f4d565b915061139983610f4d565b92508282026113a781610f4d565b915082820484148315176113be576113bd6111d6565b5b5092915050565b7f54543a207472616e7366657220616d6f756e74206578636565647320616c6c6f60008201527f77616e6365000000000000000000000000000000000000000000000000000000602082015250565b6000611421602583610e43565b915061142c826113c5565b604082019050919050565b6000602082019050818103600083015261145081611414565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061149182610f4d565b915061149c83610f4d565b9250826114ac576114ab611457565b5b828204905092915050565b60006114c282610f4d565b91506114cd83610f4d565b92508282039050818111156114e5576114e46111d6565b5b92915050565b60006114f682610f4d565b915061150183610f4d565b9250828201905080821115611519576115186111d6565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611555602083610e43565b91506115608261151f565b602082019050919050565b6000602082019050818103600083015261158481611548565b9050919050565b7f54543a207472616e7366657220616d6f756e7420657863656564732062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b60006115e7602383610e43565b91506115f28261158b565b604082019050919050565b60006020820190508181036000830152611616816115da565b9050919050565b7f496e76616c6964206665652070657263656e7400000000000000000000000000600082015250565b6000611653601383610e43565b915061165e8261161d565b602082019050919050565b6000602082019050818103600083015261168281611646565b905091905056fea26469706673582212205490a5a076ce61d7c4c48763078201f5b6ef95839822d055142a57427b97c53f64736f6c63430008120033