60806040526001600060146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600681526020017f43484f4e4b5900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f43484f4e4b5900000000000000000000000000000000000000000000000000008152508160049080519060200190620000b192919062000398565b508060059080519060200190620000ca92919062000398565b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200012d620001216200015160201b60201c565b6200015960201b60201c565b6200014b336b204fce5e3e250261100000006200021f60201b60201c565b620005e6565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000289906200049b565b60405180910390fd5b620002a6600083836200038e60201b60201c565b8060036000828254620002ba9190620004eb565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200036e9190620004bd565b60405180910390a36200038a600083836200039360201b60201c565b5050565b505050565b505050565b828054620003a69062000552565b90600052602060002090601f016020900481019282620003ca576000855562000416565b82601f10620003e557805160ff191683800117855562000416565b8280016001018555821562000416579182015b8281111562000415578251825591602001919060010190620003f8565b5b50905062000425919062000429565b5090565b5b80821115620004445760008160009055506001016200042a565b5090565b600062000457601f83620004da565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b620004958162000548565b82525050565b60006020820190508181036000830152620004b68162000448565b9050919050565b6000602082019050620004d460008301846200048a565b92915050565b600082825260208201905092915050565b6000620004f88262000548565b9150620005058362000548565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200053d576200053c62000588565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200056b57607f821691505b60208210811415620005825762000581620005b7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b611bac80620005f66000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063715018a6116100ad578063a457c2d711610071578063a457c2d71461030f578063a9059cbb1461033f578063b1d17c981461036f578063dd62ed3e1461038b578063f2fde38b146103bb5761012c565b8063715018a61461028f57806379cc6790146102995780638da5cb5b146102b557806391cca3db146102d357806395d89b41146102f15761012c565b80632f685022116100f45780632f685022146101eb578063313ce567146101f5578063395093511461021357806342966c681461024357806370a082311461025f5761012c565b806306fdde0314610131578063095ea7b31461014f57806318160ddd1461017f57806323b872dd1461019d57806327578055146101cd575b600080fd5b6101396103d7565b60405161014691906117d5565b60405180910390f35b6101696004803603810190610164919061126f565b610469565b60405161017691906117ba565b60405180910390f35b61018761048c565b6040516101949190611977565b60405180910390f35b6101b760048036038101906101b29190611220565b610496565b6040516101c491906117ba565b60405180910390f35b6101d56104c5565b6040516101e291906117ba565b60405180910390f35b6101f36104d8565b005b6101fd61054c565b60405161020a9190611992565b60405180910390f35b61022d6004803603810190610228919061126f565b610555565b60405161023a91906117ba565b60405180910390f35b61025d600480360381019061025891906112ab565b61058c565b005b610279600480360381019061027491906111bb565b6105a0565b6040516102869190611977565b60405180910390f35b6102976105e9565b005b6102b360048036038101906102ae919061126f565b6105fd565b005b6102bd61061d565b6040516102ca919061179f565b60405180910390f35b6102db610647565b6040516102e8919061179f565b60405180910390f35b6102f961066b565b60405161030691906117d5565b60405180910390f35b6103296004803603810190610324919061126f565b6106fd565b60405161033691906117ba565b60405180910390f35b6103596004803603810190610354919061126f565b610774565b60405161036691906117ba565b60405180910390f35b610389600480360381019061038491906111bb565b610797565b005b6103a560048036038101906103a091906111e4565b610809565b6040516103b29190611977565b60405180910390f35b6103d560048036038101906103d091906111bb565b610890565b005b6060600480546103e690611aa7565b80601f016020809104026020016040519081016040528092919081815260200182805461041290611aa7565b801561045f5780601f106104345761010080835404028352916020019161045f565b820191906000526020600020905b81548152906001019060200180831161044257829003601f168201915b5050505050905090565b600080610474610914565b905061048181858561091c565b600191505092915050565b6000600354905090565b6000806104a1610914565b90506104ae858285610ae7565b6104b9858585610b73565b60019150509392505050565b600060149054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461053057600080fd5b60008060146101000a81548160ff021916908315150217905550565b60006012905090565b600080610560610914565b90506105818185856105728589610809565b61057c91906119c9565b61091c565b600191505092915050565b61059d610597610914565b82610e73565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6105f1611043565b6105fb60006110c1565b565b61060f82610609610914565b83610ae7565b6106198282610e73565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606005805461067a90611aa7565b80601f01602080910402602001604051908101604052809291908181526020018280546106a690611aa7565b80156106f35780601f106106c8576101008083540402835291602001916106f3565b820191906000526020600020905b8154815290600101906020018083116106d657829003601f168201915b5050505050905090565b600080610708610914565b905060006107168286610809565b90508381101561075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611957565b60405180910390fd5b610768828686840361091c565b60019250505092915050565b60008061077f610914565b905061078c818585610b73565b600191505092915050565b61079f611043565b60006107aa336105a0565b90506b204fce5e3e2502611000000081146107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190611897565b60405180910390fd5b610805338383610b73565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610898611043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90611837565b60405180910390fd5b610911816110c1565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390611937565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f390611857565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610ada9190611977565b60405180910390a3505050565b6000610af38484610809565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b6d5781811015610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5690611877565b60405180910390fd5b610b6c848484840361091c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda90611917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4a906117f7565b60405180910390fd5b600060149054906101000a900460ff168015610cbb575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15610cd857692a5a058fc295ed000000811115610cd757600080fd5b5b610ce3838383611187565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d61906118b7565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e5a9190611977565b60405180910390a3610e6d84848461118c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda906118f7565b60405180910390fd5b610eef82600083611187565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90611817565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161102a9190611977565b60405180910390a361103e8360008461118c565b505050565b61104b610914565b73ffffffffffffffffffffffffffffffffffffffff1661106961061d565b73ffffffffffffffffffffffffffffffffffffffff16146110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906118d7565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000813590506111a081611b48565b92915050565b6000813590506111b581611b5f565b92915050565b6000602082840312156111cd57600080fd5b60006111db84828501611191565b91505092915050565b600080604083850312156111f757600080fd5b600061120585828601611191565b925050602061121685828601611191565b9150509250929050565b60008060006060848603121561123557600080fd5b600061124386828701611191565b935050602061125486828701611191565b9250506040611265868287016111a6565b9150509250925092565b6000806040838503121561128257600080fd5b600061129085828601611191565b92505060206112a1858286016111a6565b9150509250929050565b6000602082840312156112bd57600080fd5b60006112cb848285016111a6565b91505092915050565b6112dd81611a1f565b82525050565b6112ec81611a31565b82525050565b60006112fd826119ad565b61130781856119b8565b9350611317818560208601611a74565b61132081611b37565b840191505092915050565b60006113386023836119b8565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061139e6022836119b8565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114046026836119b8565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061146a6022836119b8565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006114d0601d836119b8565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000611510601a836119b8565b91507f546f6b656e7320616c72656164792064697374726962757465640000000000006000830152602082019050919050565b60006115506026836119b8565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006115b66020836119b8565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006115f66021836119b8565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061165c6025836119b8565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006116c26024836119b8565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006117286025836119b8565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b61178a81611a5d565b82525050565b61179981611a67565b82525050565b60006020820190506117b460008301846112d4565b92915050565b60006020820190506117cf60008301846112e3565b92915050565b600060208201905081810360008301526117ef81846112f2565b905092915050565b600060208201905081810360008301526118108161132b565b9050919050565b6000602082019050818103600083015261183081611391565b9050919050565b60006020820190508181036000830152611850816113f7565b9050919050565b600060208201905081810360008301526118708161145d565b9050919050565b60006020820190508181036000830152611890816114c3565b9050919050565b600060208201905081810360008301526118b081611503565b9050919050565b600060208201905081810360008301526118d081611543565b9050919050565b600060208201905081810360008301526118f0816115a9565b9050919050565b60006020820190508181036000830152611910816115e9565b9050919050565b600060208201905081810360008301526119308161164f565b9050919050565b60006020820190508181036000830152611950816116b5565b9050919050565b600060208201905081810360008301526119708161171b565b9050919050565b600060208201905061198c6000830184611781565b92915050565b60006020820190506119a76000830184611790565b92915050565b600081519050919050565b600082825260208201905092915050565b60006119d482611a5d565b91506119df83611a5d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a1457611a13611ad9565b5b828201905092915050565b6000611a2a82611a3d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611a92578082015181840152602081019050611a77565b83811115611aa1576000848401525b50505050565b60006002820490506001821680611abf57607f821691505b60208210811415611ad357611ad2611b08565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b611b5181611a1f565b8114611b5c57600080fd5b50565b611b6881611a5d565b8114611b7357600080fd5b5056fea2646970667358221220a085941a26536d2eff45bcd4087e17c776ebdf764ecb89a65385ab6dad37c80564736f6c63430008000033