60806040523480156200001157600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600a81526020017f546f696c657457696e65000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f57494e45000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000ad929190620003bc565b508060019080519060200190620000c6929190620003bc565b505050620000e9620000dd620002ee60201b60201c565b620002f660201b60201c565b6001600b8190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115620002e6578015620001ac576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b815260040162000172929190620004b1565b600060405180830381600087803b1580156200018d57600080fd5b505af1158015620001a2573d6000803e3d6000fd5b50505050620002e5565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000266576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b81526004016200022c929190620004b1565b600060405180830381600087803b1580156200024757600080fd5b505af11580156200025c573d6000803e3d6000fd5b50505050620002e4565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b8152600401620002af9190620004de565b600060405180830381600087803b158015620002ca57600080fd5b505af1158015620002df573d6000803e3d6000fd5b505050505b5b5b50506200055f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620003ca906200052a565b90600052602060002090601f016020900481019282620003ee57600085556200043a565b82601f106200040957805160ff19168380011785556200043a565b828001600101855582156200043a579182015b82811115620004395782518255916020019190600101906200041c565b5b5090506200044991906200044d565b5090565b5b80821115620004685760008160009055506001016200044e565b5090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000499826200046c565b9050919050565b620004ab816200048c565b82525050565b6000604082019050620004c86000830185620004a0565b620004d76020830184620004a0565b9392505050565b6000602082019050620004f56000830184620004a0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200054357607f821691505b602082108103620005595762000558620004fb565b5b50919050565b6149fa806200056f6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806361bc221a1161010f578063a22cb465116100a2578063df1081e911610071578063df1081e91461057d578063e985e9c514610599578063eea3cd85146105c9578063f2fde38b146105e5576101e5565b8063a22cb465146104f9578063b64b21ca14610515578063b88d4fde14610531578063c87b56dd1461054d576101e5565b8063715018a6116100de578063715018a61461049557806374e0c8bf1461049f5780638da5cb5b146104bd57806395d89b41146104db576101e5565b806361bc221a146103f95780636352211e146104175780636c0360eb1461044757806370a0823114610465576101e5565b806321d37b4d116101875780632f745c59116101565780632f745c59146103615780633dd08c381461039157806342842e0e146103ad5780634f6ccce7146103c9576101e5565b806321d37b4d146102dc57806323b872dd146102f85780632a55205a146103145780632ba5b47914610345576101e5565b8063081812fc116101c3578063081812fc14610254578063095ea7b3146102845780630d7163c6146102a057806318160ddd146102be576101e5565b806301ffc9a7146101ea57806304634d8d1461021a57806306fdde0314610236575b600080fd5b61020460048036038101906101ff9190613225565b610601565b604051610211919061326d565b60405180910390f35b610234600480360381019061022f919061332a565b610613565b005b61023e610629565b60405161024b9190613403565b60405180910390f35b61026e6004803603810190610269919061345b565b6106bb565b60405161027b9190613497565b60405180910390f35b61029e600480360381019061029991906134b2565b610701565b005b6102a8610818565b6040516102b59190613501565b60405180910390f35b6102c661081e565b6040516102d39190613501565b60405180910390f35b6102f660048036038101906102f19190613664565b61082b565b005b610312600480360381019061030d91906136ad565b610894565b005b61032e60048036038101906103299190613700565b610a76565b60405161033c929190613740565b60405180910390f35b61035f600480360381019061035a9190613769565b610c60565b005b61037b600480360381019061037691906134b2565b610c8c565b6040516103889190613501565b60405180910390f35b6103ab60048036038101906103a691906137bc565b610d31565b005b6103c760048036038101906103c291906136ad565b610de4565b005b6103e360048036038101906103de919061345b565b610fc6565b6040516103f09190613501565b60405180910390f35b610401611037565b60405161040e9190613501565b60405180910390f35b610431600480360381019061042c919061345b565b61103d565b60405161043e9190613497565b60405180910390f35b61044f6110c3565b60405161045c9190613403565b60405180910390f35b61047f600480360381019061047a91906137bc565b611151565b60405161048c9190613501565b60405180910390f35b61049d611208565b005b6104a761121c565b6040516104b4919061326d565b60405180910390f35b6104c561122f565b6040516104d29190613497565b60405180910390f35b6104e3611259565b6040516104f09190613403565b60405180910390f35b610513600480360381019061050e9190613815565b6112eb565b005b61052f600480360381019061052a919061390a565b611301565b005b61054b60048036038101906105469190613a07565b61133e565b005b6105676004803603810190610562919061345b565b611523565b6040516105749190613403565b60405180910390f35b61059760048036038101906105929190613a8a565b6115ab565b005b6105b360048036038101906105ae9190613ae6565b6115df565b6040516105c0919061326d565b60405180910390f35b6105e360048036038101906105de9190613815565b611673565b005b6105ff60048036038101906105fa91906137bc565b6116d6565b005b600061060c82611759565b9050919050565b61061b6117d3565b6106258282611851565b5050565b60606000805461063890613b55565b80601f016020809104026020016040519081016040528092919081815260200182805461066490613b55565b80156106b15780601f10610686576101008083540402835291602001916106b1565b820191906000526020600020905b81548152906001019060200180831161069457829003601f168201915b5050505050905090565b60006106c6826119e6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061070c8261103d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077390613bf8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661079b611a31565b73ffffffffffffffffffffffffffffffffffffffff1614806107ca57506107c9816107c4611a31565b6115df565b5b610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090613c8a565b60405180910390fd5b6108138383611a39565b505050565b60125481565b6000600880549050905090565b6108336117d3565b60005b81518110156108905761086582828151811061085557610854613caa565b5b6020026020010151601354611af2565b6013600081548092919061087890613d08565b9190505550808061088890613d08565b915050610836565b5050565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610a64573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361090657610901848484611b10565b610a70565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161094f929190613d50565b602060405180830381865afa15801561096c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109909190613d8e565b8015610a2257506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b81526004016109e0929190613d50565b602060405180830381865afa1580156109fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a219190613d8e565b5b610a6357336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610a5a9190613497565b60405180910390fd5b5b610a6f848484611b10565b5b50505050565b6000806000600d60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610c0b57600c6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610c15611b70565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610c419190613dbb565b610c4b9190613e44565b90508160000151819350935050509250929050565b610c686117d3565b81601460008581526020019081526020016000208190555080601281905550505050565b6000610c9783611151565b8210610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90613ee7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490613f53565b60405180910390fd5b610dc981601354611af2565b60136000815480929190610ddc90613d08565b919050555050565b8260006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fb4573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e5657610e51848484611b7a565b610fc0565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610e9f929190613d50565b602060405180830381865afa158015610ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee09190613d8e565b8015610f7257506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b8152600401610f30929190613d50565b602060405180830381865afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f719190613d8e565b5b610fb357336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610faa9190613497565b60405180910390fd5b5b610fbf848484611b7a565b5b50505050565b6000610fd061081e565b8210611011576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100890613fe5565b60405180910390fd5b6008828154811061102557611024613caa565b5b90600052602060002001549050919050565b60135481565b60008061104983611b9a565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b190614051565b60405180910390fd5b80915050919050565b601080546110d090613b55565b80601f01602080910402602001604051908101604052809291908181526020018280546110fc90613b55565b80156111495780601f1061111e57610100808354040283529160200191611149565b820191906000526020600020905b81548152906001019060200180831161112c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b8906140e3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112106117d3565b61121a6000611bd7565b565b601160009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461126890613b55565b80601f016020809104026020016040519081016040528092919081815260200182805461129490613b55565b80156112e15780601f106112b6576101008083540402835291602001916112e1565b820191906000526020600020905b8154815290600101906020018083116112c457829003601f168201915b5050505050905090565b6112fd6112f6611a31565b8383611c9d565b5050565b6113096117d3565b816010908051906020019061131f929190613116565b5080601160006101000a81548160ff0219169083151502179055505050565b8360006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b111561150f573373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113b1576113ac85858585611e09565b61151c565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016113fa929190613d50565b602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613d8e565b80156114cd57506daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430836040518363ffffffff1660e01b815260040161148b929190613d50565b602060405180830381865afa1580156114a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cc9190613d8e565b5b61150e57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016115059190613497565b60405180910390fd5b5b61151b85858585611e09565b5b5050505050565b606061152e82611e6b565b61153757600080fd5b601160009054906101000a900460ff166115785761155482611eac565b604051602001611564919061413f565b6040516020818303038152906040526115a4565b601061158383611f93565b6040516020016115949291906141ea565b6040516020818303038152906040525b9050919050565b6115b36117d3565b80600f600084815260200190815260200160002090805190602001906115da929190613116565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61167b6117d3565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6116de6117d3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490614280565b60405180910390fd5b61175681611bd7565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117cc57506117cb82612061565b5b9050919050565b6117db611a31565b73ffffffffffffffffffffffffffffffffffffffff166117f961122f565b73ffffffffffffffffffffffffffffffffffffffff161461184f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611846906142ec565b60405180910390fd5b565b611859611b70565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae9061437e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d906143ea565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600c60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6119ef81611e6b565b611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2590614051565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611aac8361103d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611b0c8282604051806020016040528060008152506120db565b5050565b611b21611b1b611a31565b82612136565b611b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b579061447c565b60405180910390fd5b611b6b8383836121cb565b505050565b6000612710905090565b611b958383836040518060200160405280600081525061133e565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d02906144e8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611dfc919061326d565b60405180910390a3505050565b611e1a611e14611a31565b83612136565b611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e509061447c565b60405180910390fd5b611e65848484846124c4565b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16611e8d83611b9a565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060005b6012548111611f8c576014600082815260200190815260200160002054831015611f7957600f60008281526020019081526020016000208054611ef390613b55565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1f90613b55565b8015611f6c5780601f10611f4157610100808354040283529160200191611f6c565b820191906000526020600020905b815481529060010190602001808311611f4f57829003601f168201915b5050505050915050611f8e565b8080611f8490613d08565b915050611eb1565b505b919050565b606060006001611fa284612520565b01905060008167ffffffffffffffff811115611fc157611fc0613521565b5b6040519080825280601f01601f191660200182016040528015611ff35781602001600182028036833780820191505090505b509050600082602001820190505b600115612056578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161204a57612049613e15565b5b04945060008503612001575b819350505050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120d457506120d382612673565b5b9050919050565b6120e58383612755565b6120f26000848484612972565b612131576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121289061457a565b60405180910390fd5b505050565b6000806121428361103d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612184575061218381856115df565b5b806121c257508373ffffffffffffffffffffffffffffffffffffffff166121aa846106bb565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121eb8261103d565b73ffffffffffffffffffffffffffffffffffffffff1614612241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122389061460c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a79061469e565b60405180910390fd5b6122bd8383836001612af9565b8273ffffffffffffffffffffffffffffffffffffffff166122dd8261103d565b73ffffffffffffffffffffffffffffffffffffffff1614612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232a9061460c565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124bf8383836001612c57565b505050565b6124cf8484846121cb565b6124db84848484612972565b61251a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125119061457a565b60405180910390fd5b50505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061257e577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161257457612573613e15565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106125bb576d04ee2d6d415b85acef810000000083816125b1576125b0613e15565b5b0492506020810190505b662386f26fc1000083106125ea57662386f26fc1000083816125e0576125df613e15565b5b0492506010810190505b6305f5e1008310612613576305f5e100838161260957612608613e15565b5b0492506008810190505b612710831061263857612710838161262e5761262d613e15565b5b0492506004810190505b6064831061265b576064838161265157612650613e15565b5b0492506002810190505b600a831061266a576001810190505b80915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061273e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061274e575061274d82612c5d565b5b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bb9061470a565b60405180910390fd5b6127cd81611e6b565b1561280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490614776565b60405180910390fd5b61281b600083836001612af9565b61282481611e6b565b15612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285b90614776565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461296e600083836001612c57565b5050565b60006129938473ffffffffffffffffffffffffffffffffffffffff16612cc7565b15612aec578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129bc611a31565b8786866040518563ffffffff1660e01b81526004016129de94939291906147eb565b6020604051808303816000875af1925050508015612a1a57506040513d601f19601f82011682018060405250810190612a17919061484c565b60015b612a9c573d8060008114612a4a576040519150601f19603f3d011682016040523d82523d6000602084013e612a4f565b606091505b506000815103612a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8b9061457a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612af1565b600190505b949350505050565b612b0584848484612cea565b6001811115612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b40906148eb565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612b9057612b8b81612e10565b612bcf565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612bce57612bcd8582612e59565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c1157612c0c81612fc6565b612c50565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612c4f57612c4e8482613097565b5b5b5050505050565b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6001811115612e0a57600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612d7e5780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d76919061490b565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e095780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e01919061493f565b925050819055505b5b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e6684611151565b612e70919061490b565b9050600060076000848152602001908152602001600020549050818114612f55576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fda919061490b565b905060006009600084815260200190815260200160002054905060006008838154811061300a57613009613caa565b5b90600052602060002001549050806008838154811061302c5761302b613caa565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061307b5761307a614995565b5b6001900381819060005260206000200160009055905550505050565b60006130a283611151565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461312290613b55565b90600052602060002090601f016020900481019282613144576000855561318b565b82601f1061315d57805160ff191683800117855561318b565b8280016001018555821561318b579182015b8281111561318a57825182559160200191906001019061316f565b5b509050613198919061319c565b5090565b5b808211156131b557600081600090555060010161319d565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613202816131cd565b811461320d57600080fd5b50565b60008135905061321f816131f9565b92915050565b60006020828403121561323b5761323a6131c3565b5b600061324984828501613210565b91505092915050565b60008115159050919050565b61326781613252565b82525050565b6000602082019050613282600083018461325e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132b382613288565b9050919050565b6132c3816132a8565b81146132ce57600080fd5b50565b6000813590506132e0816132ba565b92915050565b60006bffffffffffffffffffffffff82169050919050565b613307816132e6565b811461331257600080fd5b50565b600081359050613324816132fe565b92915050565b60008060408385031215613341576133406131c3565b5b600061334f858286016132d1565b925050602061336085828601613315565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133a4578082015181840152602081019050613389565b838111156133b3576000848401525b50505050565b6000601f19601f8301169050919050565b60006133d58261336a565b6133df8185613375565b93506133ef818560208601613386565b6133f8816133b9565b840191505092915050565b6000602082019050818103600083015261341d81846133ca565b905092915050565b6000819050919050565b61343881613425565b811461344357600080fd5b50565b6000813590506134558161342f565b92915050565b600060208284031215613471576134706131c3565b5b600061347f84828501613446565b91505092915050565b613491816132a8565b82525050565b60006020820190506134ac6000830184613488565b92915050565b600080604083850312156134c9576134c86131c3565b5b60006134d7858286016132d1565b92505060206134e885828601613446565b9150509250929050565b6134fb81613425565b82525050565b600060208201905061351660008301846134f2565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613559826133b9565b810181811067ffffffffffffffff8211171561357857613577613521565b5b80604052505050565b600061358b6131b9565b90506135978282613550565b919050565b600067ffffffffffffffff8211156135b7576135b6613521565b5b602082029050602081019050919050565b600080fd5b60006135e06135db8461359c565b613581565b90508083825260208201905060208402830185811115613603576136026135c8565b5b835b8181101561362c578061361888826132d1565b845260208401935050602081019050613605565b5050509392505050565b600082601f83011261364b5761364a61351c565b5b813561365b8482602086016135cd565b91505092915050565b60006020828403121561367a576136796131c3565b5b600082013567ffffffffffffffff811115613698576136976131c8565b5b6136a484828501613636565b91505092915050565b6000806000606084860312156136c6576136c56131c3565b5b60006136d4868287016132d1565b93505060206136e5868287016132d1565b92505060406136f686828701613446565b9150509250925092565b60008060408385031215613717576137166131c3565b5b600061372585828601613446565b925050602061373685828601613446565b9150509250929050565b60006040820190506137556000830185613488565b61376260208301846134f2565b9392505050565b600080600060608486031215613782576137816131c3565b5b600061379086828701613446565b93505060206137a186828701613446565b92505060406137b286828701613446565b9150509250925092565b6000602082840312156137d2576137d16131c3565b5b60006137e0848285016132d1565b91505092915050565b6137f281613252565b81146137fd57600080fd5b50565b60008135905061380f816137e9565b92915050565b6000806040838503121561382c5761382b6131c3565b5b600061383a858286016132d1565b925050602061384b85828601613800565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561387557613874613521565b5b61387e826133b9565b9050602081019050919050565b82818337600083830152505050565b60006138ad6138a88461385a565b613581565b9050828152602081018484840111156138c9576138c8613855565b5b6138d484828561388b565b509392505050565b600082601f8301126138f1576138f061351c565b5b813561390184826020860161389a565b91505092915050565b60008060408385031215613921576139206131c3565b5b600083013567ffffffffffffffff81111561393f5761393e6131c8565b5b61394b858286016138dc565b925050602061395c85828601613800565b9150509250929050565b600067ffffffffffffffff82111561398157613980613521565b5b61398a826133b9565b9050602081019050919050565b60006139aa6139a584613966565b613581565b9050828152602081018484840111156139c6576139c5613855565b5b6139d184828561388b565b509392505050565b600082601f8301126139ee576139ed61351c565b5b81356139fe848260208601613997565b91505092915050565b60008060008060808587031215613a2157613a206131c3565b5b6000613a2f878288016132d1565b9450506020613a40878288016132d1565b9350506040613a5187828801613446565b925050606085013567ffffffffffffffff811115613a7257613a716131c8565b5b613a7e878288016139d9565b91505092959194509250565b60008060408385031215613aa157613aa06131c3565b5b6000613aaf85828601613446565b925050602083013567ffffffffffffffff811115613ad057613acf6131c8565b5b613adc858286016138dc565b9150509250929050565b60008060408385031215613afd57613afc6131c3565b5b6000613b0b858286016132d1565b9250506020613b1c858286016132d1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b6d57607f821691505b602082108103613b8057613b7f613b26565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613be2602183613375565b9150613bed82613b86565b604082019050919050565b60006020820190508181036000830152613c1181613bd5565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000613c74603d83613375565b9150613c7f82613c18565b604082019050919050565b60006020820190508181036000830152613ca381613c67565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d1382613425565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d4557613d44613cd9565b5b600182019050919050565b6000604082019050613d656000830185613488565b613d726020830184613488565b9392505050565b600081519050613d88816137e9565b92915050565b600060208284031215613da457613da36131c3565b5b6000613db284828501613d79565b91505092915050565b6000613dc682613425565b9150613dd183613425565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e0a57613e09613cd9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e4f82613425565b9150613e5a83613425565b925082613e6a57613e69613e15565b5b828204905092915050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ed1602b83613375565b9150613edc82613e75565b604082019050919050565b60006020820190508181036000830152613f0081613ec4565b9050919050565b7f4e6f7420617574686f7269736564000000000000000000000000000000000000600082015250565b6000613f3d600e83613375565b9150613f4882613f07565b602082019050919050565b60006020820190508181036000830152613f6c81613f30565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613fcf602c83613375565b9150613fda82613f73565b604082019050919050565b60006020820190508181036000830152613ffe81613fc2565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061403b601883613375565b915061404682614005565b602082019050919050565b6000602082019050818103600083015261406a8161402e565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006140cd602983613375565b91506140d882614071565b604082019050919050565b600060208201905081810360008301526140fc816140c0565b9050919050565b600081905092915050565b60006141198261336a565b6141238185614103565b9350614133818560208601613386565b80840191505092915050565b600061414b828461410e565b915081905092915050565b60008190508160005260206000209050919050565b6000815461417881613b55565b6141828186614103565b9450600182166000811461419d57600181146141ae576141e1565b60ff198316865281860193506141e1565b6141b785614156565b60005b838110156141d9578154818901526001820191506020810190506141ba565b838801955050505b50505092915050565b60006141f6828561416b565b9150614202828461410e565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061426a602683613375565b91506142758261420e565b604082019050919050565b600060208201905081810360008301526142998161425d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142d6602083613375565b91506142e1826142a0565b602082019050919050565b60006020820190508181036000830152614305816142c9565b9050919050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000614368602a83613375565b91506143738261430c565b604082019050919050565b600060208201905081810360008301526143978161435b565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006143d4601983613375565b91506143df8261439e565b602082019050919050565b60006020820190508181036000830152614403816143c7565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614466602d83613375565b91506144718261440a565b604082019050919050565b6000602082019050818103600083015261449581614459565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006144d2601983613375565b91506144dd8261449c565b602082019050919050565b60006020820190508181036000830152614501816144c5565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614564603283613375565b915061456f82614508565b604082019050919050565b6000602082019050818103600083015261459381614557565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006145f6602583613375565b91506146018261459a565b604082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614688602483613375565b91506146938261462c565b604082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006146f4602083613375565b91506146ff826146be565b602082019050919050565b60006020820190508181036000830152614723816146e7565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614760601c83613375565b915061476b8261472a565b602082019050919050565b6000602082019050818103600083015261478f81614753565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006147bd82614796565b6147c781856147a1565b93506147d7818560208601613386565b6147e0816133b9565b840191505092915050565b60006080820190506148006000830187613488565b61480d6020830186613488565b61481a60408301856134f2565b818103606083015261482c81846147b2565b905095945050505050565b600081519050614846816131f9565b92915050565b600060208284031215614862576148616131c3565b5b600061487084828501614837565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b60006148d5603583613375565b91506148e082614879565b604082019050919050565b60006020820190508181036000830152614904816148c8565b9050919050565b600061491682613425565b915061492183613425565b92508282101561493457614933613cd9565b5b828203905092915050565b600061494a82613425565b915061495583613425565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561498a57614989613cd9565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122034fd3bc244c965ed8dcd1c7d0a603ad55cc5a653e891ae784f3d0697c046c4e964736f6c634300080d0033