6080604052662386f26fc10000600c5534801561001b57600080fd5b50336040518060400160405280600881526020017f53757065657249440000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f53757065657249440000000000000000000000000000000000000000000000008152508160009081610098919061046e565b5080600190816100a8919061046e565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361011d5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101149190610581565b60405180910390fd5b61012c8161014260201b60201c565b5061013d600b61020860201b60201c565b61059c565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061029f57607f821691505b6020821081036102b2576102b1610258565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261031a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102dd565b61032486836102dd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061036b6103666103618461033c565b610346565b61033c565b9050919050565b6000819050919050565b61038583610350565b61039961039182610372565b8484546102ea565b825550505050565b600090565b6103ae6103a1565b6103b981848461037c565b505050565b5b818110156103dd576103d26000826103a6565b6001810190506103bf565b5050565b601f821115610422576103f3816102b8565b6103fc846102cd565b8101602085101561040b578190505b61041f610417856102cd565b8301826103be565b50505b505050565b600082821c905092915050565b600061044560001984600802610427565b1980831691505092915050565b600061045e8383610434565b9150826002028217905092915050565b6104778261021e565b67ffffffffffffffff8111156104905761048f610229565b5b61049a8254610287565b6104a58282856103e1565b600060209050601f8311600181146104d857600084156104c6578287015190505b6104d08582610452565b865550610538565b601f1984166104e6866102b8565b60005b8281101561050e578489015182556001820191506020850194506020810190506104e9565b8683101561052b5784890151610527601f891682610434565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061056b82610540565b9050919050565b61057b81610560565b82525050565b60006020820190506105966000830184610572565b92915050565b61404b806105ab6000396000f3fe6080604052600436106101e35760003560e01c80638462151c11610102578063def4af6311610095578063f2fde38b11610064578063f2fde38b14610724578063f4a0a5281461074d578063f69c6dec14610776578063f898bc96146107b3576101e3565b8063def4af6314610651578063e985e9c51461068e578063f09dfbe9146106cb578063f18d18cc146106e7576101e3565b8063b88d4fde116100d1578063b88d4fde146105a4578063bdbed722146105cd578063c87b56dd146105f8578063d85d3d2714610635576101e3565b80638462151c146104e85780638da5cb5b1461052557806395d89b4114610550578063a22cb4651461057b576101e3565b80633ccfd60b1161017a5780636352211e116101495780636352211e1461042c5780636817c76c1461046957806370a0823114610494578063715018a6146104d1576101e3565b80633ccfd60b1461038457806342842e0e1461039b5780634f6ccce7146103c45780635362037514610401576101e3565b806318160ddd116101b657806318160ddd146102b65780631e7663bc146102e157806323b872dd1461031e5780632f745c5914610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190612d3f565b6107f0565b60405161021c9190612d87565b60405180910390f35b34801561023157600080fd5b5061023a61086a565b6040516102479190612e32565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190612e8a565b6108fc565b6040516102849190612ef8565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190612f3f565b610918565b005b3480156102c257600080fd5b506102cb61092e565b6040516102d89190612f8e565b60405180910390f35b3480156102ed57600080fd5b50610308600480360381019061030391906130de565b61093b565b6040516103159190612f8e565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190613127565b6109c3565b005b34801561035357600080fd5b5061036e60048036038101906103699190612f3f565b610ac5565b60405161037b9190612f8e565b60405180910390f35b34801561039057600080fd5b50610399610b6e565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190613127565b610c75565b005b3480156103d057600080fd5b506103eb60048036038101906103e69190612e8a565b610c95565b6040516103f89190612f8e565b60405180910390f35b34801561040d57600080fd5b50610416610d0b565b6040516104239190613286565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190612e8a565b610e62565b6040516104609190612ef8565b60405180910390f35b34801561047557600080fd5b5061047e610e74565b60405161048b9190612f8e565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906132a8565b610e7a565b6040516104c89190612f8e565b60405180910390f35b3480156104dd57600080fd5b506104e6610f34565b005b3480156104f457600080fd5b5061050f600480360381019061050a91906132a8565b610f48565b60405161051c9190613393565b60405180910390f35b34801561053157600080fd5b5061053a610ff0565b6040516105479190612ef8565b60405180910390f35b34801561055c57600080fd5b5061056561101a565b6040516105729190612e32565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d91906133e1565b6110ac565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906134c2565b6110c2565b005b3480156105d957600080fd5b506105e26110df565b6040516105ef9190613393565b60405180910390f35b34801561060457600080fd5b5061061f600480360381019061061a9190612e8a565b611191565b60405161062c9190612e32565b60405180910390f35b61064f600480360381019061064a91906130de565b6111fa565b005b34801561065d57600080fd5b50610678600480360381019061067391906130de565b6112f0565b6040516106859190612ef8565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613545565b611368565b6040516106c29190612d87565b60405180910390f35b6106e560048036038101906106e0919061366b565b6113fc565b005b3480156106f357600080fd5b5061070e60048036038101906107099190612e8a565b611566565b60405161071b9190612e32565b60405180910390f35b34801561073057600080fd5b5061074b600480360381019061074691906132a8565b611682565b005b34801561075957600080fd5b50610774600480360381019061076f9190612e8a565b611708565b005b34801561078257600080fd5b5061079d600480360381019061079891906130de565b61171a565b6040516107aa9190612d87565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d591906132a8565b611744565b6040516107e79190613286565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610863575061086282611891565b5b9050919050565b606060008054610879906136e3565b80601f01602080910402602001604051908101604052809291908181526020018280546108a5906136e3565b80156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b5050505050905090565b600061090782611973565b50610911826119fb565b9050919050565b61092a8282610925611a38565b611a40565b5050565b6000600880549050905090565b600080600e8360405161094e9190613750565b9081526020016040518091039020540361099d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610994906137b3565b60405180910390fd5b600e826040516109ad9190613750565b9081526020016040518091039020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a355760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610a2c9190612ef8565b60405180910390fd5b6000610a498383610a44611a38565b611a52565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610abf578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610ab6939291906137d3565b60405180910390fd5b50505050565b6000610ad083610e7a565b8210610b155782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610b0c92919061380a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b76611b6f565b600047905060008111610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb59061387f565b60405180910390fd5b6000610bc8610ff0565b73ffffffffffffffffffffffffffffffffffffffff1682604051610beb906138d0565b60006040518083038185875af1925050503d8060008114610c28576040519150601f19603f3d011682016040523d82523d6000602084013e610c2d565b606091505b5050905080610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613931565b60405180910390fd5b5050565b610c90838383604051806020016040528060008152506110c2565b505050565b6000610c9f61092e565b8210610ce5576000826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610cdc92919061380a565b60405180910390fd5b60088281548110610cf957610cf8613951565b5b90600052602060002001549050919050565b606060006001610d1b600b611bf6565b610d2591906139af565b905060008167ffffffffffffffff811115610d4357610d42612fb3565b5b604051908082528060200260200182016040528015610d7657816020015b6060815260200190600190039081610d615790505b50905060005b82811015610e59576000610d8f82610c95565b9050600d60008281526020019081526020016000208054610daf906136e3565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddb906136e3565b8015610e285780601f10610dfd57610100808354040283529160200191610e28565b820191906000526020600020905b815481529060010190602001808311610e0b57829003601f168201915b5050505050838381518110610e4057610e3f613951565b5b6020026020010181905250508080600101915050610d7c565b50809250505090565b6000610e6d82611973565b9050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eed5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610ee49190612ef8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f3c611b6f565b610f466000611c04565b565b60606000610f5583610e7a565b905060008167ffffffffffffffff811115610f7357610f72612fb3565b5b604051908082528060200260200182016040528015610fa15781602001602082028036833780820191505090505b50905060005b82811015610fe557610fb98582610ac5565b828281518110610fcc57610fcb613951565b5b6020026020010181815250508080600101915050610fa7565b508092505050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611029906136e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611055906136e3565b80156110a25780601f10611077576101008083540402835291602001916110a2565b820191906000526020600020905b81548152906001019060200180831161108557829003601f168201915b5050505050905090565b6110be6110b7611a38565b8383611cca565b5050565b6110cd8484846109c3565b6110d984848484611e39565b50505050565b6060600060016110ef600b611bf6565b6110f991906139af565b905060008167ffffffffffffffff81111561111757611116612fb3565b5b6040519080825280602002602001820160405280156111455781602001602082028036833780820191505090505b50905060005b828110156111885761115c81610c95565b82828151811061116f5761116e613951565b5b602002602001018181525050808060010191505061114b565b50809250505090565b606061119c82611973565b5060006111a7611ff0565b905060008151116111c757604051806020016040528060008152506111f2565b806111d184612010565b6040516020016111e29291906139e3565b6040516020818303038152906040525b915050919050565b6112038161171a565b611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613a53565b60405180910390fd5b600c54341015611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613abf565b60405180910390fd5b6000611293600b611bf6565b905061129f600b6120de565b6112a933826120f4565b6112b38183612112565b7f0519a1418aca49025ebc195d2b009b3b9597e0538df930b0514040932c1de86e81836040516112e4929190613adf565b60405180910390a15050565b600080600e836040516113039190613750565b908152602001604051809103902054905060008103611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134e906137b3565b60405180910390fd5b61136081610e62565b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8051600c5461140b9190613b0f565b34101561144d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144490613abf565b60405180910390fd5b60005b81518110156115625761147c82828151811061146f5761146e613951565b5b602002602001015161171a565b6114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613b9d565b60405180910390fd5b60006114c7600b611bf6565b90506114d3600b6120de565b6114dd33826120f4565b611501818484815181106114f4576114f3613951565b5b6020026020010151612112565b7f0519a1418aca49025ebc195d2b009b3b9597e0538df930b0514040932c1de86e8184848151811061153657611535613951565b5b602002602001015160405161154c929190613adf565b60405180910390a1508080600101915050611450565b5050565b6060600073ffffffffffffffffffffffffffffffffffffffff1661158983610e62565b73ffffffffffffffffffffffffffffffffffffffff16036115df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d690613c09565b60405180910390fd5b600d600083815260200190815260200160002080546115fd906136e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611629906136e3565b80156116765780601f1061164b57610100808354040283529160200191611676565b820191906000526020600020905b81548152906001019060200180831161165957829003601f168201915b50505050509050919050565b61168a611b6f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036116fc5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016116f39190612ef8565b60405180910390fd5b61170581611c04565b50565b611710611b6f565b80600c8190555050565b600080600e8360405161172d9190613750565b908152602001604051809103902054149050919050565b6060600061175183610e7a565b905060008167ffffffffffffffff81111561176f5761176e612fb3565b5b6040519080825280602002602001820160405280156117a257816020015b606081526020019060019003908161178d5790505b50905060005b828110156118865760006117bc8683610ac5565b9050600d600082815260200190815260200160002080546117dc906136e3565b80601f0160208091040260200160405190810160405280929190818152602001828054611808906136e3565b80156118555780601f1061182a57610100808354040283529160200191611855565b820191906000526020600020905b81548152906001019060200180831161183857829003601f168201915b505050505083838151811061186d5761186c613951565b5b60200260200101819052505080806001019150506117a8565b508092505050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061195c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061196c575061196b8261215a565b5b9050919050565b60008061197f836121c4565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036119f257826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016119e99190612f8e565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b611a4d8383836001612201565b505050565b600080611a608585856123c6565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611aa457611a9f846125e0565b611ae3565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ae257611ae18185612629565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611b2557611b208461278a565b611b64565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611b6357611b62858561285b565b5b5b809150509392505050565b611b77611a38565b73ffffffffffffffffffffffffffffffffffffffff16611b95610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611bf457611bb8611a38565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611beb9190612ef8565b60405180910390fd5b565b600081600001549050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d3b57816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611d329190612ef8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2c9190612d87565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611fea578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e7d611a38565b8685856040518563ffffffff1660e01b8152600401611e9f9493929190613c7e565b6020604051808303816000875af1925050508015611edb57506040513d601f19601f82011682018060405250810190611ed89190613cdf565b60015b611f5f573d8060008114611f0b576040519150601f19603f3d011682016040523d82523d6000602084013e611f10565b606091505b506000815103611f5757836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611f4e9190612ef8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611fe857836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611fdf9190612ef8565b60405180910390fd5b505b50505050565b60606040518060600160405280602d8152602001613fe9602d9139905090565b60606000600161201f846128e6565b01905060008167ffffffffffffffff81111561203e5761203d612fb3565b5b6040519080825280601f01601f1916602001820160405280156120705781602001600182028036833780820191505090505b509050600082602001820190505b6001156120d3578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120c7576120c6613d0c565b5b0494506000850361207e575b819350505050919050565b6001816000016000828254019250508190555050565b61210e828260405180602001604052806000815250612a39565b5050565b80600d600084815260200190815260200160002090816121329190613ee7565b5081600e826040516121449190613750565b9081526020016040518091039020819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b808061223a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561236e57600061224a84611973565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122b557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156122c857506122c68184611368565b155b1561230a57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016123019190612ef8565b60405180910390fd5b811561236c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000806123d2846121c4565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461241457612413818486612a55565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146124a557612456600085600080612201565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612528576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600061263483610e7a565b9050600060076000848152602001908152602001600020549050818114612719576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061279e91906139af565b90506000600960008481526020019081526020016000205490506000600883815481106127ce576127cd613951565b5b9060005260206000200154905080600883815481106127f0576127ef613951565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061283f5761283e613fb9565b5b6001900381819060005260206000200160009055905550505050565b6000600161286884610e7a565b61287291906139af565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612944577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161293a57612939613d0c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612981576d04ee2d6d415b85acef8100000000838161297757612976613d0c565b5b0492506020810190505b662386f26fc1000083106129b057662386f26fc1000083816129a6576129a5613d0c565b5b0492506010810190505b6305f5e10083106129d9576305f5e10083816129cf576129ce613d0c565b5b0492506008810190505b61271083106129fe5761271083816129f4576129f3613d0c565b5b0492506004810190505b60648310612a215760648381612a1757612a16613d0c565b5b0492506002810190505b600a8310612a30576001810190505b80915050919050565b612a438383612b19565b612a506000848484611e39565b505050565b612a60838383612c12565b612b1457600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ad557806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401612acc9190612f8e565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401612b0b92919061380a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b8b5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401612b829190612ef8565b60405180910390fd5b6000612b9983836000611a52565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612c0d5760006040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401612c049190612ef8565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cca57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612c8b5750612c8a8484611368565b5b80612cc957508273ffffffffffffffffffffffffffffffffffffffff16612cb1836119fb565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d1c81612ce7565b8114612d2757600080fd5b50565b600081359050612d3981612d13565b92915050565b600060208284031215612d5557612d54612cdd565b5b6000612d6384828501612d2a565b91505092915050565b60008115159050919050565b612d8181612d6c565b82525050565b6000602082019050612d9c6000830184612d78565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ddc578082015181840152602081019050612dc1565b60008484015250505050565b6000601f19601f8301169050919050565b6000612e0482612da2565b612e0e8185612dad565b9350612e1e818560208601612dbe565b612e2781612de8565b840191505092915050565b60006020820190508181036000830152612e4c8184612df9565b905092915050565b6000819050919050565b612e6781612e54565b8114612e7257600080fd5b50565b600081359050612e8481612e5e565b92915050565b600060208284031215612ea057612e9f612cdd565b5b6000612eae84828501612e75565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ee282612eb7565b9050919050565b612ef281612ed7565b82525050565b6000602082019050612f0d6000830184612ee9565b92915050565b612f1c81612ed7565b8114612f2757600080fd5b50565b600081359050612f3981612f13565b92915050565b60008060408385031215612f5657612f55612cdd565b5b6000612f6485828601612f2a565b9250506020612f7585828601612e75565b9150509250929050565b612f8881612e54565b82525050565b6000602082019050612fa36000830184612f7f565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612feb82612de8565b810181811067ffffffffffffffff8211171561300a57613009612fb3565b5b80604052505050565b600061301d612cd3565b90506130298282612fe2565b919050565b600067ffffffffffffffff82111561304957613048612fb3565b5b61305282612de8565b9050602081019050919050565b82818337600083830152505050565b600061308161307c8461302e565b613013565b90508281526020810184848401111561309d5761309c612fae565b5b6130a884828561305f565b509392505050565b600082601f8301126130c5576130c4612fa9565b5b81356130d584826020860161306e565b91505092915050565b6000602082840312156130f4576130f3612cdd565b5b600082013567ffffffffffffffff81111561311257613111612ce2565b5b61311e848285016130b0565b91505092915050565b6000806000606084860312156131405761313f612cdd565b5b600061314e86828701612f2a565b935050602061315f86828701612f2a565b925050604061317086828701612e75565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600082825260208201905092915050565b60006131c282612da2565b6131cc81856131a6565b93506131dc818560208601612dbe565b6131e581612de8565b840191505092915050565b60006131fc83836131b7565b905092915050565b6000602082019050919050565b600061321c8261317a565b6132268185613185565b93508360208202850161323885613196565b8060005b85811015613274578484038952815161325585826131f0565b945061326083613204565b925060208a0199505060018101905061323c565b50829750879550505050505092915050565b600060208201905081810360008301526132a08184613211565b905092915050565b6000602082840312156132be576132bd612cdd565b5b60006132cc84828501612f2a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61330a81612e54565b82525050565b600061331c8383613301565b60208301905092915050565b6000602082019050919050565b6000613340826132d5565b61334a81856132e0565b9350613355836132f1565b8060005b8381101561338657815161336d8882613310565b975061337883613328565b925050600181019050613359565b5085935050505092915050565b600060208201905081810360008301526133ad8184613335565b905092915050565b6133be81612d6c565b81146133c957600080fd5b50565b6000813590506133db816133b5565b92915050565b600080604083850312156133f8576133f7612cdd565b5b600061340685828601612f2a565b9250506020613417858286016133cc565b9150509250929050565b600067ffffffffffffffff82111561343c5761343b612fb3565b5b61344582612de8565b9050602081019050919050565b600061346561346084613421565b613013565b90508281526020810184848401111561348157613480612fae565b5b61348c84828561305f565b509392505050565b600082601f8301126134a9576134a8612fa9565b5b81356134b9848260208601613452565b91505092915050565b600080600080608085870312156134dc576134db612cdd565b5b60006134ea87828801612f2a565b94505060206134fb87828801612f2a565b935050604061350c87828801612e75565b925050606085013567ffffffffffffffff81111561352d5761352c612ce2565b5b61353987828801613494565b91505092959194509250565b6000806040838503121561355c5761355b612cdd565b5b600061356a85828601612f2a565b925050602061357b85828601612f2a565b9150509250929050565b600067ffffffffffffffff8211156135a05761359f612fb3565b5b602082029050602081019050919050565b600080fd5b60006135c96135c484613585565b613013565b905080838252602082019050602084028301858111156135ec576135eb6135b1565b5b835b8181101561363357803567ffffffffffffffff81111561361157613610612fa9565b5b80860161361e89826130b0565b855260208501945050506020810190506135ee565b5050509392505050565b600082601f83011261365257613651612fa9565b5b81356136628482602086016135b6565b91505092915050565b60006020828403121561368157613680612cdd565b5b600082013567ffffffffffffffff81111561369f5761369e612ce2565b5b6136ab8482850161363d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136fb57607f821691505b60208210810361370e5761370d6136b4565b5b50919050565b600081905092915050565b600061372a82612da2565b6137348185613714565b9350613744818560208601612dbe565b80840191505092915050565b600061375c828461371f565b915081905092915050565b7f557365726e616d6520646f6573206e6f74206578697374000000000000000000600082015250565b600061379d601783612dad565b91506137a882613767565b602082019050919050565b600060208201905081810360008301526137cc81613790565b9050919050565b60006060820190506137e86000830186612ee9565b6137f56020830185612f7f565b6138026040830184612ee9565b949350505050565b600060408201905061381f6000830185612ee9565b61382c6020830184612f7f565b9392505050565b7f4e6f20657468657220746f207769746864726177000000000000000000000000600082015250565b6000613869601483612dad565b915061387482613833565b602082019050919050565b600060208201905081810360008301526138988161385c565b9050919050565b600081905092915050565b50565b60006138ba60008361389f565b91506138c5826138aa565b600082019050919050565b60006138db826138ad565b9150819050919050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b600061391b600f83612dad565b9150613926826138e5565b602082019050919050565b6000602082019050818103600083015261394a8161390e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139ba82612e54565b91506139c583612e54565b92508282039050818111156139dd576139dc613980565b5b92915050565b60006139ef828561371f565b91506139fb828461371f565b91508190509392505050565b7f557365726e616d6520697320616c72656164792074616b656e00000000000000600082015250565b6000613a3d601983612dad565b9150613a4882613a07565b602082019050919050565b60006020820190508181036000830152613a6c81613a30565b9050919050565b7f496e73756666696369656e742065746865722073656e74000000000000000000600082015250565b6000613aa9601783612dad565b9150613ab482613a73565b602082019050919050565b60006020820190508181036000830152613ad881613a9c565b9050919050565b6000604082019050613af46000830185612f7f565b8181036020830152613b068184612df9565b90509392505050565b6000613b1a82612e54565b9150613b2583612e54565b9250828202613b3381612e54565b91508282048414831517613b4a57613b49613980565b5b5092915050565b7f557365726e616d652074616b656e000000000000000000000000000000000000600082015250565b6000613b87600e83612dad565b9150613b9282613b51565b602082019050919050565b60006020820190508181036000830152613bb681613b7a565b9050919050565b7f546f6b656e20646f6573206e6f74206578697374000000000000000000000000600082015250565b6000613bf3601483612dad565b9150613bfe82613bbd565b602082019050919050565b60006020820190508181036000830152613c2281613be6565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613c5082613c29565b613c5a8185613c34565b9350613c6a818560208601612dbe565b613c7381612de8565b840191505092915050565b6000608082019050613c936000830187612ee9565b613ca06020830186612ee9565b613cad6040830185612f7f565b8181036060830152613cbf8184613c45565b905095945050505050565b600081519050613cd981612d13565b92915050565b600060208284031215613cf557613cf4612cdd565b5b6000613d0384828501613cca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613d9d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613d60565b613da78683613d60565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613de4613ddf613dda84612e54565b613dbf565b612e54565b9050919050565b6000819050919050565b613dfe83613dc9565b613e12613e0a82613deb565b848454613d6d565b825550505050565b600090565b613e27613e1a565b613e32818484613df5565b505050565b5b81811015613e5657613e4b600082613e1f565b600181019050613e38565b5050565b601f821115613e9b57613e6c81613d3b565b613e7584613d50565b81016020851015613e84578190505b613e98613e9085613d50565b830182613e37565b50505b505050565b600082821c905092915050565b6000613ebe60001984600802613ea0565b1980831691505092915050565b6000613ed78383613ead565b9150826002028217905092915050565b613ef082612da2565b67ffffffffffffffff811115613f0957613f08612fb3565b5b613f1382546136e3565b613f1e828285613e5a565b600060209050601f831160018114613f515760008415613f3f578287015190505b613f498582613ecb565b865550613fb1565b601f198416613f5f86613d3b565b60005b82811015613f8757848901518255600182019150602085019450602081019050613f62565b86831015613fa45784890151613fa0601f891682613ead565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe68747470733a2f2f6675726c65722e7375706565722e746563682f73757065657269642f6d657461646174612fa264697066735822122006d789adec820de031aaa2767075ce6d88c547cc0dc73cce13cc63950248a91564736f6c63430008190033