0x60806040523480156200001157600080fd5b5060405162002008380380620020088339818101604052810190620000379190620003bf565b828281600390816200004a91906200069a565b5080600490816200005c91906200069a565b5050506200007133826200007a60201b60201c565b5050506200089c565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e390620007e2565b60405180910390fd5b6200010060008383620001e760201b60201c565b806002600082825462000114919062000833565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620001c791906200087f565b60405180910390a3620001e360008383620001ec60201b60201c565b5050565b505050565b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200025a826200020f565b810181811067ffffffffffffffff821117156200027c576200027b62000220565b5b80604052505050565b600062000291620001f1565b90506200029f82826200024f565b919050565b600067ffffffffffffffff821115620002c257620002c162000220565b5b620002cd826200020f565b9050602081019050919050565b60005b83811015620002fa578082015181840152602081019050620002dd565b60008484015250505050565b60006200031d6200031784620002a4565b62000285565b9050828152602081018484840111156200033c576200033b6200020a565b5b62000349848285620002da565b509392505050565b600082601f83011262000369576200036862000205565b5b81516200037b84826020860162000306565b91505092915050565b6000819050919050565b620003998162000384565b8114620003a557600080fd5b50565b600081519050620003b9816200038e565b92915050565b600080600060608486031215620003db57620003da620001fb565b5b600084015167ffffffffffffffff811115620003fc57620003fb62000200565b5b6200040a8682870162000351565b935050602084015167ffffffffffffffff8111156200042e576200042d62000200565b5b6200043c8682870162000351565b92505060406200044f86828701620003a8565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004ac57607f821691505b602082108103620004c257620004c162000464565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200052c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004ed565b620005388683620004ed565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200057b620005756200056f8462000384565b62000550565b62000384565b9050919050565b6000819050919050565b62000597836200055a565b620005af620005a68262000582565b848454620004fa565b825550505050565b600090565b620005c6620005b7565b620005d38184846200058c565b505050565b5b81811015620005fb57620005ef600082620005bc565b600181019050620005d9565b5050565b601f8211156200064a576200061481620004c8565b6200061f84620004dd565b810160208510156200062f578190505b620006476200063e85620004dd565b830182620005d8565b50505b505050565b600082821c905092915050565b60006200066f600019846008026200064f565b1980831691505092915050565b60006200068a83836200065c565b9150826002028217905092915050565b620006a58262000459565b67ffffffffffffffff811115620006c157620006c062000220565b5b620006cd825462000493565b620006da828285620005ff565b600060209050601f831160018114620007125760008415620006fd578287015190505b6200070985826200067c565b86555062000779565b601f1984166200072286620004c8565b60005b828110156200074c5784890151825560018201915060208501945060208101905062000725565b868310156200076c578489015162000768601f8916826200065c565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007ca601f8362000781565b9150620007d78262000792565b602082019050919050565b60006020820190508181036000830152620007fd81620007bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620008408262000384565b91506200084d8362000384565b925082820190508082111562000868576200086762000804565b5b92915050565b620008798162000384565b82525050565b60006020820190506200089660008301846200086e565b92915050565b61175c80620008ac6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806340c10f191161008c5780639dc29fac116100665780639dc29fac14610228578063a457c2d714610244578063a9059cbb14610274578063dd62ed3e146102a4576100cf565b806340c10f19146101be57806370a08231146101da57806395d89b411461020a576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce56714610170578063395093511461018e575b600080fd5b6100dc6102d4565b6040516100e99190610ea9565b60405180910390f35b61010c60048036038101906101079190610f64565b610366565b6040516101199190610fbf565b60405180910390f35b61012a610389565b6040516101379190610fe9565b60405180910390f35b61015a60048036038101906101559190611004565b610393565b6040516101679190610fbf565b60405180910390f35b6101786103c2565b6040516101859190611073565b60405180910390f35b6101a860048036038101906101a39190610f64565b6103cb565b6040516101b59190610fbf565b60405180910390f35b6101d860048036038101906101d39190610f64565b610402565b005b6101f460048036038101906101ef919061108e565b610410565b6040516102019190610fe9565b60405180910390f35b610212610458565b60405161021f9190610ea9565b60405180910390f35b610242600480360381019061023d9190610f64565b6104ea565b005b61025e60048036038101906102599190610f64565b6104f8565b60405161026b9190610fbf565b60405180910390f35b61028e60048036038101906102899190610f64565b61056f565b60405161029b9190610fbf565b60405180910390f35b6102be60048036038101906102b991906110bb565b610592565b6040516102cb9190610fe9565b60405180910390f35b6060600380546102e39061112a565b80601f016020809104026020016040519081016040528092919081815260200182805461030f9061112a565b801561035c5780601f106103315761010080835404028352916020019161035c565b820191906000526020600020905b81548152906001019060200180831161033f57829003601f168201915b5050505050905090565b600080610371610619565b905061037e818585610621565b600191505092915050565b6000600254905090565b60008061039e610619565b90506103ab8582856107ea565b6103b6858585610876565b60019150509392505050565b60006012905090565b6000806103d6610619565b90506103f78185856103e88589610592565b6103f2919061118a565b610621565b600191505092915050565b61040c8282610aec565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600480546104679061112a565b80601f01602080910402602001604051908101604052809291908181526020018280546104939061112a565b80156104e05780601f106104b5576101008083540402835291602001916104e0565b820191906000526020600020905b8154815290600101906020018083116104c357829003601f168201915b5050505050905090565b6104f48282610c42565b5050565b600080610503610619565b905060006105118286610592565b905083811015610556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054d90611230565b60405180910390fd5b6105638286868403610621565b60019250505092915050565b60008061057a610619565b9050610587818585610876565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610687906112c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f690611354565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516107dd9190610fe9565b60405180910390a3505050565b60006107f68484610592565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108705781811015610862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610859906113c0565b60405180910390fd5b61086f8484848403610621565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611452565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610954576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094b906114e4565b60405180910390fd5b61095f838383610e0f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109dc90611576565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ad39190610fe9565b60405180910390a3610ae6848484610e14565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b52906115e2565b60405180910390fd5b610b6760008383610e0f565b8060026000828254610b79919061118a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610c2a9190610fe9565b60405180910390a3610c3e60008383610e14565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca890611674565b60405180910390fd5b610cbd82600083610e0f565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3a90611706565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610df69190610fe9565b60405180910390a3610e0a83600084610e14565b505050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610e53578082015181840152602081019050610e38565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e7b82610e19565b610e858185610e24565b9350610e95818560208601610e35565b610e9e81610e5f565b840191505092915050565b60006020820190508181036000830152610ec38184610e70565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610efb82610ed0565b9050919050565b610f0b81610ef0565b8114610f1657600080fd5b50565b600081359050610f2881610f02565b92915050565b6000819050919050565b610f4181610f2e565b8114610f4c57600080fd5b50565b600081359050610f5e81610f38565b92915050565b60008060408385031215610f7b57610f7a610ecb565b5b6000610f8985828601610f19565b9250506020610f9a85828601610f4f565b9150509250929050565b60008115159050919050565b610fb981610fa4565b82525050565b6000602082019050610fd46000830184610fb0565b92915050565b610fe381610f2e565b82525050565b6000602082019050610ffe6000830184610fda565b92915050565b60008060006060848603121561101d5761101c610ecb565b5b600061102b86828701610f19565b935050602061103c86828701610f19565b925050604061104d86828701610f4f565b9150509250925092565b600060ff82169050919050565b61106d81611057565b82525050565b60006020820190506110886000830184611064565b92915050565b6000602082840312156110a4576110a3610ecb565b5b60006110b284828501610f19565b91505092915050565b600080604083850312156110d2576110d1610ecb565b5b60006110e085828601610f19565b92505060206110f185828601610f19565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061114257607f821691505b602082108103611155576111546110fb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061119582610f2e565b91506111a083610f2e565b92508282019050808211156111b8576111b761115b565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061121a602583610e24565b9150611225826111be565b604082019050919050565b600060208201905081810360008301526112498161120d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006112ac602483610e24565b91506112b782611250565b604082019050919050565b600060208201905081810360008301526112db8161129f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061133e602283610e24565b9150611349826112e2565b604082019050919050565b6000602082019050818103600083015261136d81611331565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006113aa601d83610e24565b91506113b582611374565b602082019050919050565b600060208201905081810360008301526113d98161139d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061143c602583610e24565b9150611447826113e0565b604082019050919050565b6000602082019050818103600083015261146b8161142f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006114ce602383610e24565b91506114d982611472565b604082019050919050565b600060208201905081810360008301526114fd816114c1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611560602683610e24565b915061156b82611504565b604082019050919050565b6000602082019050818103600083015261158f81611553565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006115cc601f83610e24565b91506115d782611596565b602082019050919050565b600060208201905081810360008301526115fb816115bf565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061165e602183610e24565b915061166982611602565b604082019050919050565b6000602082019050818103600083015261168d81611651565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006116f0602283610e24565b91506116fb82611694565b604082019050919050565b6000602082019050818103600083015261171f816116e3565b905091905056fea2646970667358221220b5b8044ff0627954c81a505337788b36f478187eff7069893ef525a802b57a2464736f6c63430008110033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000000000000000000000444454d4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024431000000000000000000000000000000000000000000000000000000000000