60806040526040518060400160405280600b81526020017f546564647920546f6b656e0000000000000000000000000000000000000000008152505f9081610047919061036a565b506040518060400160405280600581526020017f54656464790000000000000000000000000000000000000000000000000000008152506001908161008c919061036a565b50601260025f6101000a81548160ff021916908360ff1602179055503480156100b3575f80fd5b5060025f9054906101000a900460ff1660ff16600a6100d29190610595565b6305f5e1006100e191906105df565b60038190555060035460045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610620565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101ab57607f821691505b6020821081036101be576101bd610167565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026102207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101e5565b61022a86836101e5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61026e61026961026484610242565b61024b565b610242565b9050919050565b5f819050919050565b61028783610254565b61029b61029382610275565b8484546101f1565b825550505050565b5f90565b6102af6102a3565b6102ba81848461027e565b505050565b5b818110156102dd576102d25f826102a7565b6001810190506102c0565b5050565b601f821115610322576102f3816101c4565b6102fc846101d6565b8101602085101561030b578190505b61031f610317856101d6565b8301826102bf565b50505b505050565b5f82821c905092915050565b5f6103425f1984600802610327565b1980831691505092915050565b5f61035a8383610333565b9150826002028217905092915050565b61037382610130565b67ffffffffffffffff81111561038c5761038b61013a565b5b6103968254610194565b6103a18282856102e1565b5f60209050601f8311600181146103d2575f84156103c0578287015190505b6103ca858261034f565b865550610431565b601f1984166103e0866101c4565b5f5b82811015610407578489015182556001820191506020850194506020810190506103e2565b868310156104245784890151610420601f891682610333565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156104bb5780860481111561049757610496610439565b5b60018516156104a65780820291505b80810290506104b485610466565b945061047b565b94509492505050565b5f826104d3576001905061058e565b816104e0575f905061058e565b81600181146104f657600281146105005761052f565b600191505061058e565b60ff84111561051257610511610439565b5b8360020a91508482111561052957610528610439565b5b5061058e565b5060208310610133831016604e8410600b84101617156105645782820a90508381111561055f5761055e610439565b5b61058e565b6105718484846001610472565b9250905081840481111561058857610587610439565b5b81810290505b9392505050565b5f61059f82610242565b91506105aa83610242565b92506105d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846104c4565b905092915050565b5f6105e982610242565b91506105f483610242565b925082820261060281610242565b9150828204841483151761061957610618610439565b5b5092915050565b6113b18061062d5f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c806370a082311161006f57806370a08231146101a057806379cc6790146101d057806395d89b4114610200578063a9059cbb1461021e578063cae9ca511461024e578063dd62ed3e1461027e576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806342966c6814610170575b5f80fd5b6100be6102ae565b6040516100cb9190610dac565b60405180910390f35b6100ee60048036038101906100e99190610e6a565b610339565b6040516100fb9190610ec2565b60405180910390f35b61010c610426565b6040516101199190610eea565b60405180910390f35b61013c60048036038101906101379190610f03565b61042c565b6040516101499190610ec2565b60405180910390f35b61015a610555565b6040516101679190610f6e565b60405180910390f35b61018a60048036038101906101859190610f87565b610567565b6040516101979190610ec2565b60405180910390f35b6101ba60048036038101906101b59190610fb2565b610673565b6040516101c79190610eea565b60405180910390f35b6101ea60048036038101906101e59190610e6a565b610688565b6040516101f79190610ec2565b60405180910390f35b6102086108a7565b6040516102159190610dac565b60405180910390f35b61023860048036038101906102339190610e6a565b610933565b6040516102459190610ec2565b60405180910390f35b61026860048036038101906102639190611109565b610949565b6040516102759190610ec2565b60405180910390f35b61029860048036038101906102939190611175565b6109dc565b6040516102a59190610eea565b60405180910390f35b5f80546102ba906111e0565b80601f01602080910402602001604051908101604052809291908181526020018280546102e6906111e0565b80156103315780601f1061030857610100808354040283529160200191610331565b820191905f5260205f20905b81548152906001019060200180831161031457829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516104149190610eea565b60405180910390a36001905092915050565b60035481565b5f60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548211156104b1575f80fd5b8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610538919061123d565b9250508190555061054a8484846109fc565b600190509392505050565b60025f9054906101000a900460ff1681565b5f8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156105b1575f80fd5b8160045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546105fd919061123d565b925050819055508160035f828254610615919061123d565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516106629190610eea565b60405180910390a260019050919050565b6004602052805f5260405f205f915090505481565b5f8160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156106d2575f80fd5b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610756575f80fd5b8160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107a2919061123d565b925050819055508160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610830919061123d565b925050819055508160035f828254610848919061123d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5836040516108959190610eea565b60405180910390a26001905092915050565b600180546108b4906111e0565b80601f01602080910402602001604051908101604052809291908181526020018280546108e0906111e0565b801561092b5780601f106109025761010080835404028352916020019161092b565b820191905f5260205f20905b81548152906001019060200180831161090e57829003601f168201915b505050505081565b5f61093f3384846109fc565b6001905092915050565b5f808490506109588585610339565b156109d3578073ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338630876040518563ffffffff1660e01b815260040161099c94939291906112d1565b5f604051808303815f87803b1580156109b3575f80fd5b505af11580156109c5573d5f803e3d5ffd5b5050505060019150506109d5565b505b9392505050565b6005602052815f5260405f20602052805f5260405f205f91509150505481565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a33575f80fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610a7c575f80fd5b60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20548160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b03919061131b565b1015610b0d575f80fd5b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610b94919061131b565b90508160045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610be2919061123d565b925050819055508160045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c35919061131b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c999190610eea565b60405180910390a38060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460045f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610d28919061131b565b14610d3657610d3561134e565b5b50505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d7e82610d3c565b610d888185610d46565b9350610d98818560208601610d56565b610da181610d64565b840191505092915050565b5f6020820190508181035f830152610dc48184610d74565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610e0682610ddd565b9050919050565b610e1681610dfc565b8114610e20575f80fd5b50565b5f81359050610e3181610e0d565b92915050565b5f819050919050565b610e4981610e37565b8114610e53575f80fd5b50565b5f81359050610e6481610e40565b92915050565b5f8060408385031215610e8057610e7f610dd5565b5b5f610e8d85828601610e23565b9250506020610e9e85828601610e56565b9150509250929050565b5f8115159050919050565b610ebc81610ea8565b82525050565b5f602082019050610ed55f830184610eb3565b92915050565b610ee481610e37565b82525050565b5f602082019050610efd5f830184610edb565b92915050565b5f805f60608486031215610f1a57610f19610dd5565b5b5f610f2786828701610e23565b9350506020610f3886828701610e23565b9250506040610f4986828701610e56565b9150509250925092565b5f60ff82169050919050565b610f6881610f53565b82525050565b5f602082019050610f815f830184610f5f565b92915050565b5f60208284031215610f9c57610f9b610dd5565b5b5f610fa984828501610e56565b91505092915050565b5f60208284031215610fc757610fc6610dd5565b5b5f610fd484828501610e23565b91505092915050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61101b82610d64565b810181811067ffffffffffffffff8211171561103a57611039610fe5565b5b80604052505050565b5f61104c610dcc565b90506110588282611012565b919050565b5f67ffffffffffffffff82111561107757611076610fe5565b5b61108082610d64565b9050602081019050919050565b828183375f83830152505050565b5f6110ad6110a88461105d565b611043565b9050828152602081018484840111156110c9576110c8610fe1565b5b6110d484828561108d565b509392505050565b5f82601f8301126110f0576110ef610fdd565b5b813561110084826020860161109b565b91505092915050565b5f805f606084860312156111205761111f610dd5565b5b5f61112d86828701610e23565b935050602061113e86828701610e56565b925050604084013567ffffffffffffffff81111561115f5761115e610dd9565b5b61116b868287016110dc565b9150509250925092565b5f806040838503121561118b5761118a610dd5565b5b5f61119885828601610e23565b92505060206111a985828601610e23565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806111f757607f821691505b60208210810361120a576112096111b3565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61124782610e37565b915061125283610e37565b925082820390508181111561126a57611269611210565b5b92915050565b61127981610dfc565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f6112a38261127f565b6112ad8185611289565b93506112bd818560208601610d56565b6112c681610d64565b840191505092915050565b5f6080820190506112e45f830187611270565b6112f16020830186610edb565b6112fe6040830185611270565b81810360608301526113108184611299565b905095945050505050565b5f61132582610e37565b915061133083610e37565b925082820190508082111561134857611347611210565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea2646970667358221220ad49d8273d5ce6737b2431602ff28eda27151c9a3c1efd345a632c008c85009864736f6c634300081a0033