0x608060405234801561001057600080fd5b50336040518060400160405280600781526020017f566f7465455448000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5645544800000000000000000000000000000000000000000000000000000000815250816003908161008d91906107a5565b50806004908161009d91906107a5565b5050506000600560006101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012d5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161012491906108b8565b60405180910390fd5b61013c8161016060201b60201c565b5061015b336d14bddab3e51a57cff87a5000000061022660201b60201c565b610997565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102985760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161028f91906108b8565b60405180910390fd5b6102aa600083836102ae60201b60201c565b5050565b6102bc6102d260201b60201c565b6102cd83838361031960201b60201c565b505050565b6102e061053e60201b60201c565b15610317576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361036b57806002600082825461035f9190610902565b9250508190555061043e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156103f7578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016103ee93929190610945565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361048757806002600082825403925050819055506104d4565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610531919061097c565b60405180910390a3505050565b6000600560009054906101000a900460ff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806105d657607f821691505b6020821081036105e9576105e861058f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610614565b61065b8683610614565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006106a261069d61069884610673565b61067d565b610673565b9050919050565b6000819050919050565b6106bc83610687565b6106d06106c8826106a9565b848454610621565b825550505050565b600090565b6106e56106d8565b6106f08184846106b3565b505050565b5b81811015610714576107096000826106dd565b6001810190506106f6565b5050565b601f8211156107595761072a816105ef565b61073384610604565b81016020851015610742578190505b61075661074e85610604565b8301826106f5565b50505b505050565b600082821c905092915050565b600061077c6000198460080261075e565b1980831691505092915050565b6000610795838361076b565b9150826002028217905092915050565b6107ae82610555565b67ffffffffffffffff8111156107c7576107c6610560565b5b6107d182546105be565b6107dc828285610718565b600060209050601f83116001811461080f57600084156107fd578287015190505b6108078582610789565b86555061086f565b601f19841661081d866105ef565b60005b8281101561084557848901518255600182019150602085019450602081019050610820565b86831015610862578489015161085e601f89168261076b565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006108a282610877565b9050919050565b6108b281610897565b82525050565b60006020820190506108cd60008301846108a9565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061090d82610673565b915061091883610673565b92508282019050808211156109305761092f6108d3565b5b92915050565b61093f81610673565b82525050565b600060608201905061095a60008301866108a9565b6109676020830185610936565b6109746040830184610936565b949350505050565b60006020820190506109916000830184610936565b92915050565b6112d8806109a66000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806370a082311161009757806395d89b411161006657806395d89b411461023e578063a9059cbb1461025c578063dd62ed3e1461028c578063f2fde38b146102bc576100f5565b806370a08231146101dc578063715018a61461020c5780638456cb59146102165780638da5cb5b14610220576100f5565b806323b872dd116100d357806323b872dd14610166578063313ce567146101965780633f4ba83a146101b45780635c975abb146101be576100f5565b806306fdde03146100fa578063095ea7b31461011857806318160ddd14610148575b600080fd5b6101026102d8565b60405161010f9190610f2c565b60405180910390f35b610132600480360381019061012d9190610fe7565b61036a565b60405161013f9190611042565b60405180910390f35b61015061038d565b60405161015d919061106c565b60405180910390f35b610180600480360381019061017b9190611087565b610397565b60405161018d9190611042565b60405180910390f35b61019e6103c6565b6040516101ab91906110f6565b60405180910390f35b6101bc6103cf565b005b6101c66103e1565b6040516101d39190611042565b60405180910390f35b6101f660048036038101906101f19190611111565b6103f8565b604051610203919061106c565b60405180910390f35b610214610440565b005b61021e610454565b005b610228610466565b604051610235919061114d565b60405180910390f35b610246610490565b6040516102539190610f2c565b60405180910390f35b61027660048036038101906102719190610fe7565b610522565b6040516102839190611042565b60405180910390f35b6102a660048036038101906102a19190611168565b610545565b6040516102b3919061106c565b60405180910390f35b6102d660048036038101906102d19190611111565b6105cc565b005b6060600380546102e7906111d7565b80601f0160208091040260200160405190810160405280929190818152602001828054610313906111d7565b80156103605780601f1061033557610100808354040283529160200191610360565b820191906000526020600020905b81548152906001019060200180831161034357829003601f168201915b5050505050905090565b600080610375610652565b905061038281858561065a565b600191505092915050565b6000600254905090565b6000806103a2610652565b90506103af85828561066c565b6103ba858585610700565b60019150509392505050565b60006012905090565b6103d76107f4565b6103df61087b565b565b6000600560009054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6104486107f4565b61045260006108de565b565b61045c6107f4565b6104646109a4565b565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461049f906111d7565b80601f01602080910402602001604051908101604052809291908181526020018280546104cb906111d7565b80156105185780601f106104ed57610100808354040283529160200191610518565b820191906000526020600020905b8154815290600101906020018083116104fb57829003601f168201915b5050505050905090565b60008061052d610652565b905061053a818585610700565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6105d46107f4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106465760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161063d919061114d565b60405180910390fd5b61064f816108de565b50565b600033905090565b6106678383836001610a07565b505050565b60006106788484610545565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106fa57818110156106ea578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106e193929190611208565b60405180910390fd5b6106f984848484036000610a07565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107725760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610769919061114d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107e45760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107db919061114d565b60405180910390fd5b6107ef838383610bde565b505050565b6107fc610652565b73ffffffffffffffffffffffffffffffffffffffff1661081a610466565b73ffffffffffffffffffffffffffffffffffffffff16146108795761083d610652565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610870919061114d565b60405180910390fd5b565b610883610bf6565b6000600560006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6108c7610652565b6040516108d4919061114d565b60405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6109ac610c36565b6001600560006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586109f0610652565b6040516109fd919061114d565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a795760006040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a70919061114d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610aeb5760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ae2919061114d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610bd8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bcf919061106c565b60405180910390a35b50505050565b610be6610c36565b610bf1838383610c77565b505050565b610bfe6103e1565b610c34576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b610c3e6103e1565b15610c75576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cc9578060026000828254610cbd919061126e565b92505081905550610d9c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d55578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610d4c93929190611208565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610de55780600260008282540392505081905550610e32565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610e8f919061106c565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610ed6578082015181840152602081019050610ebb565b60008484015250505050565b6000601f19601f8301169050919050565b6000610efe82610e9c565b610f088185610ea7565b9350610f18818560208601610eb8565b610f2181610ee2565b840191505092915050565b60006020820190508181036000830152610f468184610ef3565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f7e82610f53565b9050919050565b610f8e81610f73565b8114610f9957600080fd5b50565b600081359050610fab81610f85565b92915050565b6000819050919050565b610fc481610fb1565b8114610fcf57600080fd5b50565b600081359050610fe181610fbb565b92915050565b60008060408385031215610ffe57610ffd610f4e565b5b600061100c85828601610f9c565b925050602061101d85828601610fd2565b9150509250929050565b60008115159050919050565b61103c81611027565b82525050565b60006020820190506110576000830184611033565b92915050565b61106681610fb1565b82525050565b6000602082019050611081600083018461105d565b92915050565b6000806000606084860312156110a05761109f610f4e565b5b60006110ae86828701610f9c565b93505060206110bf86828701610f9c565b92505060406110d086828701610fd2565b9150509250925092565b600060ff82169050919050565b6110f0816110da565b82525050565b600060208201905061110b60008301846110e7565b92915050565b60006020828403121561112757611126610f4e565b5b600061113584828501610f9c565b91505092915050565b61114781610f73565b82525050565b6000602082019050611162600083018461113e565b92915050565b6000806040838503121561117f5761117e610f4e565b5b600061118d85828601610f9c565b925050602061119e85828601610f9c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806111ef57607f821691505b602082108103611202576112016111a8565b5b50919050565b600060608201905061121d600083018661113e565b61122a602083018561105d565b611237604083018461105d565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061127982610fb1565b915061128483610fb1565b925082820190508082111561129c5761129b61123f565b5b9291505056fea2646970667358221220918ed0f6caca033b1adf6e2c2507337041c22281aef4717ecefd7f70a9ce292864736f6c634300081c0033