60806040526040518060400160405280600981526020017f736872696e6b6167650000000000000000000000000000000000000000000000815250600490816100489190610411565b506040518060400160405280600281526020017f53460000000000000000000000000000000000000000000000000000000000008152506005908161008d9190610411565b506012600660006101000a81548160ff021916908360ff16021790555061271060075560075460085561dead600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561010557600080fd5b50604051611fde380380611fde83398181016040528101906101279190610514565b806003819055506003546000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055504260098190555033600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610541565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061024257607f821691505b602082108103610255576102546101fb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026102bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610280565b6102c78683610280565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061030e610309610304846102df565b6102e9565b6102df565b9050919050565b6000819050919050565b610328836102f3565b61033c61033482610315565b84845461028d565b825550505050565b600090565b610351610344565b61035c81848461031f565b505050565b5b8181101561038057610375600082610349565b600181019050610362565b5050565b601f8211156103c5576103968161025b565b61039f84610270565b810160208510156103ae578190505b6103c26103ba85610270565b830182610361565b50505b505050565b600082821c905092915050565b60006103e8600019846008026103ca565b1980831691505092915050565b600061040183836103d7565b9150826002028217905092915050565b61041a826101c1565b67ffffffffffffffff811115610433576104326101cc565b5b61043d825461022a565b610448828285610384565b600060209050601f83116001811461047b5760008415610469578287015190505b61047385826103f5565b8655506104db565b601f1984166104898661025b565b60005b828110156104b15784890151825560018201915060208501945060208101905061048c565b868310156104ce57848901516104ca601f8916826103d7565b8355505b6001600288020188555050505b505050505050565b600080fd5b6104f1816102df565b81146104fc57600080fd5b50565b60008151905061050e816104e8565b92915050565b60006020828403121561052a576105296104e3565b5b6000610538848285016104ff565b91505092915050565b611a8e806105506000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c80635c658165116100ad5780638fa81732116100715780638fa817321461033457806395d89b4114610352578063a6692a7814610370578063a9059cbb1461038e578063c125c861146103be57610121565b80635c6581651461027a57806370a08231146102aa57806370d5ae05146102da578063771a3a1d146102f85780638b1367841461031657610121565b806323b872dd116100f457806323b872dd146101c25780632faff427146101f2578063313ce567146102105780633ac8d9a61461022e5780633e5beab91461024a57610121565b8063060e78441461012657806306fdde0314610156578063095ea7b31461017457806318160ddd146101a4575b600080fd5b610140600480360381019061013b919061121e565b6103da565b60405161014d9190611266565b60405180910390f35b61015e6103fa565b60405161016b9190611311565b60405180910390f35b61018e60048036038101906101899190611369565b610488565b60405161019b9190611266565b60405180910390f35b6101ac6105e8565b6040516101b991906113b8565b60405180910390f35b6101dc60048036038101906101d791906113d3565b6105f2565b6040516101e99190611266565b60405180910390f35b6101fa61075a565b6040516102079190611435565b60405180910390f35b610218610780565b604051610225919061146c565b60405180910390f35b6102486004803603810190610243919061121e565b610793565b005b610264600480360381019061025f919061121e565b610867565b60405161027191906113b8565b60405180910390f35b610294600480360381019061028f9190611487565b61090f565b6040516102a191906113b8565b60405180910390f35b6102c460048036038101906102bf919061121e565b610934565b6040516102d191906113b8565b60405180910390f35b6102e261097c565b6040516102ef9190611435565b60405180910390f35b6103006109a2565b60405161030d91906113b8565b60405180910390f35b61031e6109a8565b60405161032b91906113b8565b60405180910390f35b61033c6109ae565b60405161034991906113b8565b60405180910390f35b61035a6109b5565b6040516103679190611311565b60405180910390f35b610378610a43565b60405161038591906113b8565b60405180910390f35b6103a860048036038101906103a39190611369565b610a49565b6040516103b59190611266565b60405180910390f35b6103d860048036038101906103d391906114f3565b610a5e565b005b60026020528060005260406000206000915054906101000a900460ff1681565b6004805461040790611562565b80601f016020809104026020016040519081016040528092919081815260200182805461043390611562565b80156104805780601f1061045557610100808354040283529160200191610480565b820191906000526020600020905b81548152906001019060200180831161046357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ef906115df565b60405180910390fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105d691906113b8565b60405180910390a36001905092915050565b6000600354905090565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156106b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106aa90611671565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461073f91906116c0565b92505081905550610751848484610b49565b90509392505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900460ff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081a90611740565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060016000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6001602052816000526040600020602052806000526040600020600091509150505481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b60075481565b620a875081565b600580546109c290611562565b80601f01602080910402602001604051908101604052809291908181526020018280546109ee90611562565b8015610a3b5780601f10610a1057610100808354040283529160200191610a3b565b820191906000526020600020905b815481529060010190602001808311610a1e57829003601f168201915b505050505081565b60095481565b6000610a56338484610b49565b905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590611740565b60405180910390fd5b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015610bb45750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906117d2565b60405180910390fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b9061183e565b60405180910390fd5b616108600954610c84919061185e565b4210158015610c975750620a8750600854105b15610d1457620a87506002600854610caf9190611892565b11610cc8576002600854610cc39190611892565b610ccd565b620a87505b600881905550426009819055507f82754e7bf8e3395ddb4a767c52b21ed0c3b9da843001b2e07ab46f2580323457600854604051610d0b91906113b8565b60405180910390a15b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610dba5750600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610dc5576000610de2565b620f424060085484610dd79190611892565b610de19190611903565b5b905060008184610df291906116c0565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610ea05750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15610f975760c8600354610eb49190611903565b841115610ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eed906119a6565b60405180910390fd5b6000816000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f42919061185e565b90506064600354610f539190611903565b811115610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90611a38565b60405180910390fd5b505b836000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fe591906116c0565b92505081905550806000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461103a919061185e565b9250508190555060008211156111495781600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110ba919061185e565b92505081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161114091906113b8565b60405180910390a35b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516111a691906113b8565b60405180910390a36001925050509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111eb826111c0565b9050919050565b6111fb816111e0565b811461120657600080fd5b50565b600081359050611218816111f2565b92915050565b600060208284031215611234576112336111bb565b5b600061124284828501611209565b91505092915050565b60008115159050919050565b6112608161124b565b82525050565b600060208201905061127b6000830184611257565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156112bb5780820151818401526020810190506112a0565b60008484015250505050565b6000601f19601f8301169050919050565b60006112e382611281565b6112ed818561128c565b93506112fd81856020860161129d565b611306816112c7565b840191505092915050565b6000602082019050818103600083015261132b81846112d8565b905092915050565b6000819050919050565b61134681611333565b811461135157600080fd5b50565b6000813590506113638161133d565b92915050565b600080604083850312156113805761137f6111bb565b5b600061138e85828601611209565b925050602061139f85828601611354565b9150509250929050565b6113b281611333565b82525050565b60006020820190506113cd60008301846113a9565b92915050565b6000806000606084860312156113ec576113eb6111bb565b5b60006113fa86828701611209565b935050602061140b86828701611209565b925050604061141c86828701611354565b9150509250925092565b61142f816111e0565b82525050565b600060208201905061144a6000830184611426565b92915050565b600060ff82169050919050565b61146681611450565b82525050565b6000602082019050611481600083018461145d565b92915050565b6000806040838503121561149e5761149d6111bb565b5b60006114ac85828601611209565b92505060206114bd85828601611209565b9150509250929050565b6114d08161124b565b81146114db57600080fd5b50565b6000813590506114ed816114c7565b92915050565b6000806040838503121561150a576115096111bb565b5b600061151885828601611209565b9250506020611529858286016114de565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061157a57607f821691505b60208210810361158d5761158c611533565b5b50919050565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b60006115c9601b8361128c565b91506115d482611593565b602082019050919050565b600060208201905081810360008301526115f8816115bc565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b600061165b60218361128c565b9150611666826115ff565b604082019050919050565b6000602082019050818103600083015261168a8161164e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006116cb82611333565b91506116d683611333565b92508282039050818111156116ee576116ed611691565b5b92915050565b7f43616c6c6572206973206e6f7420746865206f776e6572000000000000000000600082015250565b600061172a60178361128c565b9150611735826116f4565b602082019050919050565b600060208201905081810360008301526117598161171d565b9050919050565b7f5472616e7366657220746f2f66726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006117bc60218361128c565b91506117c782611760565b604082019050919050565b600060208201905081810360008301526117eb816117af565b9050919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061182860148361128c565b9150611833826117f2565b602082019050919050565b600060208201905081810360008301526118578161181b565b9050919050565b600061186982611333565b915061187483611333565b925082820190508082111561188c5761188b611691565b5b92915050565b600061189d82611333565b91506118a883611333565b92508282026118b681611333565b915082820484148315176118cd576118cc611691565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061190e82611333565b915061191983611333565b925082611929576119286118d4565b5b828204905092915050565b7f5472616e7366657220657863656564732074686520302e352520737570706c7960008201527f206c696d69740000000000000000000000000000000000000000000000000000602082015250565b600061199060268361128c565b915061199b82611934565b604082019050919050565b600060208201905081810360008301526119bf81611983565b9050919050565b7f526563697069656e742062616c616e636520657863656564732074686520312560008201527f20737570706c79206c696d697400000000000000000000000000000000000000602082015250565b6000611a22602d8361128c565b9150611a2d826119c6565b604082019050919050565b60006020820190508181036000830152611a5181611a15565b905091905056fea26469706673582212209101b809d6674c96be03b0feac4967dec6fb10a51fe4952636ff53704e1e1c4864736f6c634300081900330000000000000000000000000000000000000000023ac12ef364587bf2000000