60806040523480156200001157600080fd5b5060405162001eaf38038062001eaf8339818101604052810190620000379190620004ef565b6040518060400160405280600b81526020017f546178656420546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f54544300000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bb92919062000428565b508060049080519060200190620000d492919062000428565b5050506005808190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200013c336a084595161401484a000000620001b760201b60201c565b33600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001b0600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166200033060201b60201c565b5062000792565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200022a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200022190620005a2565b60405180910390fd5b6200023e600083836200041e60201b60201c565b8060026000828254620002529190620005f2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002a99190620005f2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003109190620005c4565b60405180910390a36200032c600083836200042360201b60201c565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620003c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ba9062000580565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b505050565b505050565b82805462000436906200068d565b90600052602060002090601f0160209004810192826200045a5760008555620004a6565b82601f106200047557805160ff1916838001178555620004a6565b82800160010185558215620004a6579182015b82811115620004a557825182559160200191906001019062000488565b5b509050620004b59190620004b9565b5090565b5b80821115620004d4576000816000905550600101620004ba565b5090565b600081519050620004e98162000778565b92915050565b60006020828403121562000508576200050762000721565b5b60006200051884828501620004d8565b91505092915050565b600062000530601783620005e1565b91506200053d8262000726565b602082019050919050565b600062000557601f83620005e1565b915062000564826200074f565b602082019050919050565b6200057a8162000683565b82525050565b600060208201905081810360008301526200059b8162000521565b9050919050565b60006020820190508181036000830152620005bd8162000548565b9050919050565b6000602082019050620005db60008301846200056f565b92915050565b600082825260208201905092915050565b6000620005ff8262000683565b91506200060c8362000683565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620006445762000643620006c3565b5b828201905092915050565b60006200065c8262000663565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620006a657607f821691505b60208210811415620006bd57620006bc620006f2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000783816200064f565b81146200078f57600080fd5b50565b61170d80620007a26000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063415665851161008c578063a457c2d711610066578063a457c2d714610273578063a9059cbb146102a3578063dd62ed3e146102d3578063e82bef2914610303576100ea565b8063415665851461020957806370a082311461022557806395d89b4114610255576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a95780633af32abf146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f7610321565b6040516101049190611097565b60405180910390f35b61012760048036038101906101229190610e94565b6103b3565b604051610134919061107c565b60405180910390f35b6101456103d6565b60405161015291906111b9565b60405180910390f35b61017560048036038101906101709190610e41565b6103e0565b604051610182919061107c565b60405180910390f35b610193610492565b6040516101a091906111d4565b60405180910390f35b6101c360048036038101906101be9190610e94565b61049b565b6040516101d0919061107c565b60405180910390f35b6101f360048036038101906101ee9190610dd4565b6104d2565b604051610200919061107c565b60405180910390f35b610223600480360381019061021e9190610dd4565b61052d565b005b61023f600480360381019061023a9190610dd4565b610618565b60405161024c91906111b9565b60405180910390f35b61025d610660565b60405161026a9190611097565b60405180910390f35b61028d60048036038101906102889190610e94565b6106f2565b60405161029a919061107c565b60405180910390f35b6102bd60048036038101906102b89190610e94565b610769565b6040516102ca919061107c565b60405180910390f35b6102ed60048036038101906102e89190610e01565b61080f565b6040516102fa91906111b9565b60405180910390f35b61030b610896565b6040516103189190611061565b60405180910390f35b606060038054610330906113a8565b80601f016020809104026020016040519081016040528092919081815260200182805461035c906113a8565b80156103a95780601f1061037e576101008083540402835291602001916103a9565b820191906000526020600020905b81548152906001019060200180831161038c57829003601f168201915b5050505050905090565b6000806103be6108c0565b90506103cb8185856108c8565b600191505092915050565b6000600254905090565b6000806103eb6108c0565b90506103f8858285610a93565b610401816104d2565b1561041657610411858585610b1f565b610486565b60006103e8600554856104299190611292565b6104339190611261565b90506000818561044391906112ec565b90506000829050610455888884610b1f565b61048288600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610b1f565b5050505b60019150509392505050565b60006012905090565b6000806104a66108c0565b90506104c78185856104b8858961080f565b6104c2919061120b565b6108c8565b600191505092915050565b600080600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080915050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105b4906110d9565b60405180910390fd5b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461066f906113a8565b80601f016020809104026020016040519081016040528092919081815260200182805461069b906113a8565b80156106e85780601f106106bd576101008083540402835291602001916106e8565b820191906000526020600020905b8154815290600101906020018083116106cb57829003601f168201915b5050505050905090565b6000806106fd6108c0565b9050600061070b828661080f565b905083811015610750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074790611199565b60405180910390fd5b61075d82868684036108c8565b60019250505092915050565b6000806107746108c0565b905061077f816104d2565b156107945761078f818585610b1f565b610804565b60006103e8600554856107a79190611292565b6107b19190611261565b9050600081856107c191906112ec565b905060008290506107d3848884610b1f565b61080084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610b1f565b5050505b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f90611179565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f906110f9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610a8691906111b9565b60405180910390a3505050565b6000610a9f848461080f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b195781811015610b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0290611119565b60405180910390fd5b610b1884848484036108c8565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8690611159565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf6906110b9565b60405180910390fd5b610c0a838383610da0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8790611139565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d23919061120b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610d8791906111b9565b60405180910390a3610d9a848484610da5565b50505050565b505050565b505050565b600081359050610db9816116a9565b92915050565b600081359050610dce816116c0565b92915050565b600060208284031215610dea57610de9611467565b5b6000610df884828501610daa565b91505092915050565b60008060408385031215610e1857610e17611467565b5b6000610e2685828601610daa565b9250506020610e3785828601610daa565b9150509250929050565b600080600060608486031215610e5a57610e59611467565b5b6000610e6886828701610daa565b9350506020610e7986828701610daa565b9250506040610e8a86828701610dbf565b9150509250925092565b60008060408385031215610eab57610eaa611467565b5b6000610eb985828601610daa565b9250506020610eca85828601610dbf565b9150509250929050565b610edd81611320565b82525050565b610eec81611332565b82525050565b6000610efd826111ef565b610f0781856111fa565b9350610f17818560208601611375565b610f208161146c565b840191505092915050565b6000610f386023836111fa565b9150610f438261147d565b604082019050919050565b6000610f5b6017836111fa565b9150610f66826114cc565b602082019050919050565b6000610f7e6022836111fa565b9150610f89826114f5565b604082019050919050565b6000610fa1601d836111fa565b9150610fac82611544565b602082019050919050565b6000610fc46026836111fa565b9150610fcf8261156d565b604082019050919050565b6000610fe76025836111fa565b9150610ff2826115bc565b604082019050919050565b600061100a6024836111fa565b91506110158261160b565b604082019050919050565b600061102d6025836111fa565b91506110388261165a565b604082019050919050565b61104c8161135e565b82525050565b61105b81611368565b82525050565b60006020820190506110766000830184610ed4565b92915050565b60006020820190506110916000830184610ee3565b92915050565b600060208201905081810360008301526110b18184610ef2565b905092915050565b600060208201905081810360008301526110d281610f2b565b9050919050565b600060208201905081810360008301526110f281610f4e565b9050919050565b6000602082019050818103600083015261111281610f71565b9050919050565b6000602082019050818103600083015261113281610f94565b9050919050565b6000602082019050818103600083015261115281610fb7565b9050919050565b6000602082019050818103600083015261117281610fda565b9050919050565b6000602082019050818103600083015261119281610ffd565b9050919050565b600060208201905081810360008301526111b281611020565b9050919050565b60006020820190506111ce6000830184611043565b92915050565b60006020820190506111e96000830184611052565b92915050565b600081519050919050565b600082825260208201905092915050565b60006112168261135e565b91506112218361135e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611256576112556113da565b5b828201905092915050565b600061126c8261135e565b91506112778361135e565b92508261128757611286611409565b5b828204905092915050565b600061129d8261135e565b91506112a88361135e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156112e1576112e06113da565b5b828202905092915050565b60006112f78261135e565b91506113028361135e565b925082821015611315576113146113da565b5b828203905092915050565b600061132b8261133e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015611393578082015181840152602081019050611378565b838111156113a2576000848401525b50505050565b600060028204905060018216806113c057607f821691505b602082108114156113d4576113d3611438565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6116b281611320565b81146116bd57600080fd5b50565b6116c98161135e565b81146116d457600080fd5b5056fea26469706673582212208af65d7159d74367c71fa4221ba4083949af5cd7459b7032e89697ef81baa03a64736f6c634300080700330000000000000000000000002ddc5b7287ae005747851157666b191877d6d533